Unicode 和ANSI字符串转换(引用自Windows内核编程(第五版 ))
来源:互联网 发布:游戏多开软件 编辑:程序博客网 时间:2024/05/20 01:46
在日常的编程中我们经常会遇到使用别人封装好的库,但是他们的库关于字符串的操作很多是基于ANSI来封装的,这就造成了我们在创建 的Unicode的工程在使用的时候有很多不方便,如果没有这些库的源码来做修改的情况下,我们只能考虑Unicode 和ANSI字符串转换相互转换来满足自己特殊情况的应用;
废话少说,下面直接介绍Unicode 和ANSI字符串转换的方法:
1.多字节 字符串转换为宽字符 字符串(MultiByteToWideChar)
MultiByteToWideChar的函数原型如下:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar);
转换的步骤为:
使用的一般步骤如下:
MultiByteToWideChar:
1)调用MultiByteToWideChar,为lpWideCharStr参数传入NULL,为cchWideChar参数传入0,为cchMultiByte参数传入-1;
2)分配一块足够容纳转换后Unicode字符串的内存,它的大小是上一个MultiByteToWideChar调用的返回值乘以sizeof(wchar_t);
3)再次调用MultiByteToWideChar,这一次将缓冲区地址作为lpWideCharStr参数的值传入,将第一次MultiByteToWideChar调用的返回值乘以sizeof(wchar_t) 后得到的大小的作为cchWideChar参数的值传入;
4)使用转换后的字符串;
5)释放Unicode字符串占用的内存块。
2.宽字符 字符串 转换为 多字节 字符串(WideCharToMultiByte)
先来看一下WideChatToMultiByte的定义:
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPWSTR lpWideCharStr,
int cchWideChar,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPCSTR lpDefaultChar,
PBOOL pfUsedDefaultChar );
这个函数和MultiByteToWideChar的操作步骤是一样的,唯一的不同就是:返回值直接就是确保转换成功所需的字节数,所以无需执行乘法运算。
注意:WideCharToMultiByte比MultiByteToWideChar相比多两个参数lpDefaultChar和pfUsedDefaultChar,这两个参数只有在以下情况下才会用到: 当一个字符在uCodePage指定的代码页中没有对应的表示是,才会用到这两个参数;
当遇到一个不能转换的宽字符时,pDefaultChar指定的字符便被用来替代不能转换的宽字符的字符;如果pDefault指定为NULL,函数会使用一个系统默认的字符,一般情况下为问号,这对文件明来说是比较危险的,因为问号是一个通配符;
pfUsedDefaultChar指向一个布尔变量,如果宽字符转换过程中,有至少一个字符不能转换为对应的多字节形式,这个函数会被置为TRUE,如果全部成功转换则 返回FALSE;可以用来验证转换是否顺利完成,当然一般情况下我们也会将该参数直接传入NULL;
- Unicode 和ANSI字符串转换(引用自Windows内核编程(第五版 ))
- Windows编程的Unicode&ANSI字符串转换--摘自VCKBASE
- C++字符串转换(Unicode和ANSI互转)
- 几个字符串转换函数(ANSI-->Unicode)
- windows核心编程---UNICODE和ANSI间的相互转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- 《Windows核心编程》第二讲 Unicode(2)成为符合ANSI和Unicode的应用程序
- UNICODE和ANSI字符串的转换
- UNICODE字符串和ANSI字符的转换
- unicode和ANSI字符串之间的转换
- Windows核心编程_2.ansi和unicode
- Windows下字符编码转换(ANSI <--> Unicode <--> UTF-8)
- Unicode和ANSI字符串
- Unicode与ANSI字符串转换
- ANSI UNICODE 字符串相互转换
- Unicode 与 ANSI 字符串转换
- 改天记得把自己那个代码中的改成这个boost::lexical_cast
- 汇总一些网络相关的基础概念
- 《Java实战开发经典》第四章4.8
- hdu 1709 求天平不能称重的重量 动态规划
- vector向量容器
- Unicode 和ANSI字符串转换(引用自Windows内核编程(第五版 ))
- 【简单认识】机器学习常见分类算法——朴素贝叶斯
- os模块
- 以后KMP就按照这个方式写了。看了kuangbin的写法
- 深入剖析百度dsp系统底层以及框架
- hdu 5371 Hotaru's problem(manacher+尺取法)
- js测试网速
- LeetCode题解:Palindrome Linked List
- STL系列之一 deque双向队列