-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhunicode.h
157 lines (137 loc) · 4.64 KB
/
hunicode.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/***************************************************************
* Name: hunicode.h
* Purpose: 声明hunicode接口
* Author: HYH (hyhsystem.cn)
* Created: 2024-08-21
* Copyright: HYH (hyhsystem.cn)
* License: MIT
**************************************************************/
#ifndef __HUNICODE_H_INCLUDED__
#define __HUNICODE_H_INCLUDED__
#include "stdbool.h"
#include "stdint.h"
#include "stdlib.h"
#include "limits.h"
#include "wchar.h"
/*
本文件用于处理Unicode的相关辅助函数。
*/
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
#if WCHAR_MAX > USHRT_MAX
#ifndef HUNICODE_USE_WCHAR_T
#define HUNICODE_USE_WCHAR_T 1
#endif // HUNICODE_USE_WCHAR_T
#endif
#ifdef HUNICODE_USE_WCHAR_T
#define hunicode_char_t wchar_t
#else
#define hunicode_char_t int
#endif
/** \brief 判断是否为ascii字符串
*
* \param str const char* 字符串指针
* \return bool 是否是ascii字符串
*
*/
bool hunicode_cchar_string_is_ascii(const char *str);
/** \brief 判断是否为utf8字符串
*
* \param str const char* 字符串指针
* \return bool 是否是utf8字符串
*
*/
bool hunicode_cchar_string_is_utf8(const char *str);
/** \brief 获取char字符串长度
*
* \param str const char* 字符串指针
* \return size_t 字符串长度
*
*/
size_t hunicode_cchar_string_length(const char *str);
/** \brief 获取char(UTF-8)字符串长度
*
* \param utf8_str const char* (UTF-8)字符串指针
* \return size_t (UTF-8)字符串长度,可获得转换为宽字符字符串需要多少个字符。
*
*/
size_t hunicode_cchar_utf8_string_length(const char *utf8_str);
/** \brief 获取wchar_t字符串长度
*
* \param str const wchar_t* 字符串指针
* \return size_t 字符串长度
*
*/
size_t hunicode_wchar_t_string_length(const wchar_t *str);
/** \brief 获取hunicode_char_t字符串长度
*
* \param str const hunicode_char_t* 字符串指针
* \return size_t 字符串长度
*
*/
size_t hunicode_char_string_length(const hunicode_char_t *str);
/** \brief 从wchar_t转换到hunicode_char_t
*
* \param dest hunicode_char_t* hunicode_char_t指针
* \param dest_length size_t hunicode_char_t指针所指的缓冲区长度
* \param src const wchar_t* wchar_t指针
* \param src_length size_t wchar_t指针所指的缓冲区长度
*
*/
void hunicode_char_from_wchar(hunicode_char_t *dest,size_t dest_length,const wchar_t *src,size_t src_length);
/** \brief 从wchar_t字符串转换到hunicode_char_t
*
* \param dest hunicode_char_t* hunicode_char_t指针
* \param dest_length size_t hunicode_char_t指针所指的缓冲区长度
* \param src const wchar_t* wchar_t字符串指针
*
*/
void hunicode_char_from_wchar_string(hunicode_char_t *dest,size_t dest_length,const wchar_t *src);
/** \brief 从char(UTF-8)字符串转换到hunicode_char_t
*
* \param dest hunicode_char_t* hunicode_char_t指针
* \param dest_length size_t hunicode_char_t指针所指的缓冲区长度
* \param src const char* char(UTF-8)字符串指针
*
*/
void hunicode_char_from_utf8_string(hunicode_char_t *dest,size_t dest_length,const char *src);
/** \brief 从hunicode_char_t转换到wchar_t
*
* \param dest wchar_t* wchar_t指针
* \param dest_length size_t wchar_t指针所指的缓冲区长度
* \param src const hunicode_char_t* hunicode_char_t指针
* \param src_length size_t hunicode_char_t指针所指的缓冲区长度
*
*/
void hunicode_char_to_wchar(wchar_t *dest,size_t dest_length,const hunicode_char_t *src,size_t src_length);
/** \brief 从hunicode_char_t字符串转换到wchar_t
*
* \param dest wchar_t* wchar_t指针
* \param dest_length size_t wchar_t指针所指的缓冲区长度
* \param src const hunicode_char_t* hunicode_char_t字符串指针
*
*/
void hunicode_char_string_to_wchar(wchar_t *dest,size_t dest_length,const hunicode_char_t *src);
/** \brief 从hunicode_char_t转换到char(UTF-8)字符串
*
* \param dest char* char(UTF-8)字符串缓冲区指针
* \param dest_length size_t char(UTF-8)字符串所指的缓冲区长度
* \param src const hunicode_char_t* hunicode_char_t指针
* \param src_length size_t hunicode_char_t指针所指的缓冲区长度
*
*/
void hunicode_char_to_utf8(char*dest,size_t dest_length,const hunicode_char_t *src,size_t src_length);
/** \brief 从hunicode_char_t字符串转换到char(UTF-8)字符串
*
* \param dest char* char(UTF-8)字符串缓冲区指针
* \param dest_length size_t char(UTF-8)字符串所指的缓冲区长度
* \param src const hunicode_char_t* hunicode_char_t字符串指针
*
*/
void hunicode_char_string_to_utf8(char *dest,size_t dest_length,const hunicode_char_t *src);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // __HUNICODE_H_INCLUDED__