Uincode和ASCLL
来源:互联网 发布:javascript怎么发音 编辑:程序博客网 时间:2024/06/06 17:33
我的Windows学习之路–Unicode和ASCLL的区别和用法
为什么会有Unicode编码?因为ASCLL字符集无法表示所有的字符,它只能表示255个字符,所以Unicode就顺势而出了。
首先Unicode是双子节编码,它可以表示6W多种字符,足以表示世界上的字符。
从VS2010开始默认支持Unicode字符集(其它编译器我不知道),但VS2010以下的编译器你要手动设置当前项目的字符集。如下图所示:
以上是简单的了解。
Unicode编码的是双字节,也就是在C语言中就是宽字符,一个字符用两个字节编码
例如:char szAscll[]=”abcd”;
它是以单字节形式编码的,所以它的大小是4个字节
而 wchar_t szUnicode[]=L”abcd”;
它是以双字节编码的,所以它的大小是8个字节
它们两者在内存中的形式如下:
61 62 63 64 00
61 00 62 00 63 00 64 00 00
很明显,Unicode是用2个字节存储一个字符的,低位优先存储,然后再到高位,然而内存监视器把低位放前面高位放后面,理解就好。
接下来计算出它们的长度。
ASCLL用 size_t nSizeAscll=strlen(szAscll);来计算长度其中size_t是C语言中的数据类型,表示无符号整形
Unicode用 size_t nSizeUnicode=wcslen(szUnicode);来计算长度,其中wcslen是宽字符版的计算长度函数。size_t __cdecl wcslen (const wchar_t *) ;
注:千万不能用strlen来计算宽字符的长度,因为遇到00就会截止计算,这样就不能返回正确结果。
符号L的意思:L(LONG)是标识符,告诉编译器要用双字节编码存储。例如:
MessageBoxA( __in_opt HWND hWnd, __in_opt LPCSTR lpText,
__in_opt LPCSTR lpCaption, __in UINT uType);
A就是ASCLL字符,所以LPCSTR lpText 的类型是单字符的
MessageBoxW( __in_opt HWND hWnd, __in_opt LPCWSTR lpText,
__in_opt LPCWSTR lpCaption, __in UINT uType);
W就是宽字符(Unicode编码),所以LPCWSTR lpText 的类型是双字符的
一般双字符的前面要加L或者用TEXT宏,否则编译器会报错
你也可以直接使用MessageBox函数,编译器会根据当前项目的字符集来自动调用A或W。但是建议要显示调用,这样程序运行效率会提高。
还有两个关于宽字符和窄字符的函数
窄字符转宽字符:
int MultiByteToWideChar( UINT CodePage, //代码页一般填CP_ACP,详细看,MSDN DWORD dwFlags, //一般为0,详细看MSDN LPCSTR lpMultiByteStr, //指向要转换的窄字符串的指针 int cbMultiByte, //转换长度(字节数) LPWSTR lpWideCharStr,//指向存放转换后款字符串的指针 int cchWideChar //转换长度 );
宽字符转债字符:
int WideCharToMultiByte( UINT CodePage, //代码页一般填CP_ACP,详细看,MSDN DWORD dwFlags, //一般为0,详细看MSDN LPCWSTR lpWideCharStr,//指向要转换的宽字符串的指针 int cchWideChar, //转换长度 LPSTR lpMultiByteStr, //指向接收被转换字符串的指针 int cbMultiByte,//指向的缓冲区最大值 LPCSTR lpDefaultChar,//遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符 LPBOOL lpUsedDefaultChar//至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE);
- Uincode和ASCLL
- UINCODE和CHAR互相转换
- UINCODE 和 CHAR互相转换
- 说一说ASCLL和Unicode
- UINCODE字符串和安全字符串函数
- UINCODE字符串和安全字符串函数(好)
- Uincode详解
- VS2008多字符和Uincode模式下的通用字符转换
- ascll和unicode对应的char,wchar_t存储字符
- js获得光标位置和键的ASCLL
- 体会UINCODE与ASCII
- UinCode与utf-8
- ASCll码表
- ascll 表
- ASCLL码
- ASCLL码表
- ASCLL码表
- ASCLL码表
- 第十四周 项目1 B-树的基本操作
- webStrom破解
- 动画-左右摇摆
- (完美亲测)可行的安卓手机一键修改型号的教程
- 第14周项目1-验证折半查找算法(1)
- Uincode和ASCLL
- Dubbo架构设计详解
- qemu numa nodes passthrough
- FZU Problem 2136 取糖果(线段树离散化,区间合并)
- Error: Please renew the default configurations.
- Linux中修改Mysql root用户密码的方法
- 第十四周项目1-验证折半查找
- 1、osgViewer::Viewer,osgViewer::ViewerBase,osgGA::KeySwitchMatrixManipulator,osg::ArgumentParser的说明
- 第十五周上机实践—项目1(1)—哈希表算法的验证