WideCharToMuliByte函数的使用

来源:互联网 发布:威尔数据怎么样 编辑:程序博客网 时间:2024/05/01 08:06


Unicode下的宽字符转ANSI多字节字符
现在vs中都使用的Unicode宽字节字符,但是windows的有些API需要单字节字符串的时候,比如char*,这个时候需要将宽字节转换成多字节符
使用WideCharToMultiByte将宽字符字符串转换成多字节字符串,使用MultiByteToWideChar将多字节字符串转换成宽字符字符串
int WideCharToMultiByte
(
UINT uCodePage,// 标示要与新转换的字符串关联的代码页
DWORD dwFlags,// 指定额外的转换控制,一般不使用,给0即可
PCWSTR pWideCharStr,// 指定要转换的内存地址
int cchWideChar,// 要转换字符串的长度(字符个数) 如果给-1,则由函数来判断他的长度
PSTR pMultiBytestr,// 转换所得的多字节字符串被写入的缓冲区
int cbMultiByte,// 指定pMultiBytestr缓冲区的大小,如果将0作为该参数值,则会导致该函数返回目标缓冲需要的大小(字节)
PCSTR pDefaultChar,// 当出现不能转换的字符的时候,会使用这个参数,如果这个参数为NULL,则会使用默认字符?
PBOOL pfUsedDefaultChar// 如果在转换的过程中,出现了不能转换的字符,则这个参数返回TRUE,如果所有字符都成功转换返回FALSE
)
宽字符字符串转换成多字节字符串的过程:
1. 调用该函数,将参数cbMultiByte设为0来返回一个宽字符字符串所对应的大小(字节),这样就可以知道转换之后的缓冲区的大小了
int size = WideCharToMultiByte(CP_ACP, str, str.GetLength(), NULL, 0, NULL, NULL);//得到str字符串所对应的多字节字符串的大小(字节)
char* buf = new char[size+1];//多申请一个字节的内存用来写入'\0'
2. 调用该函数进行转换
WideCharToMultiByte(CP_ACP, str, str.GetLength(), buf, size+1, NULL, NULL);//宽字符字符串转多字节字符串
buf[size] = "\0";//对于多字节字符串是以 '\0' 结尾的,所以要在字符串最后一个字符后面加上'\0'
这样就将宽字符字符串转换成了多字节字符串

0 0
原创粉丝点击