ANSI/Unicode字符串简单介绍
2024-09-08 16:01:45
1.1、wchar_t、char区别
ANSI:char,可以用strcat()、strcpy()、strlen()等str开头的函数处理char*字符串;
UNICODE:wchar_t是Unicode字符的数据类型,是我们常说的宽字符;可以用wcscat()、wcscpy()、wcslen(0等wcs开头的函数处理字符串,使用时需要在前面加一个L或者使用_T()。wchar_t的实际定义是:
typedef unsigned short wchar_t;
typedef wchar_t WCHAR;//实际WCHAR与wchar_t是相同的。
对TCHAR而言,在unicode字符集下,typedef wchar_t TCHAR; 否则是typedef char TCHAR;
char转换为wchar_t,方法一:使用TEXT();
方法二:
wchar_t* c2w(const char* str)
{
int length = strlen(str);
wchar_t* wstr = (wchar_t*)malloc(sizeof(wchar_t)*length);
memset(wstr,0,length*sizeof (wchar_t));
MultiByteToWideChar(CP_ACP,0,str,strlen(str),wstr,length);
return wstr;
}
但是一般情况下程序只会用一种字符集,这种相互转换感觉也没什么意义...?
1.2、 ANSI、Unicode之间的转换
方法一:
使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
方法二:
使用_T将ANSI转换成一般类型字符串,使用L将ANSI转换成Unicode字符串。
方法三:
使用ATL的转换宏和类,ATL宏各字符的含义
ATL3.0 C表示常量,2表示to,EX表示开辟一定大小的缓冲,sourceType和DestinationType可以是A/T/W/OLE,分别表示ANSI/Unicode/一般类型/OLE字符串;
ATL7.0 为了与ATL3.0区别,第一个C表示类,第二个C表示常量...
比如CA2CT表示将ANSI转换成Unicode字符串常量。
附录:常用的字符串以及指针的类型定义
类型 | MBCS bulids | Unicode builds |
WCHAR | wchar_t | wchar_t |
LPSTR | char* | char* |
LPCSTR | const char* | const char* |
LPWSTR | wchar_t* | wchar_t* |
LPCWSTR | wchar_t* | wchar_t* |
TCHAR | char | wchar_t |
LPTSTR | TCHAR* | TCHAR* |
LPCTSTR | const TCHAR* | const TCHAR* |
最新文章
- Android之卫星菜单的实现
- Sql Server系列:聚合函数
- PHP&;MySQL(二)——困也得啃书
- Gym 100851G	Generators (vector+鸽笼原理)
- CentOS系统中常用查看日志命令
- new Date参数问题
- Fix Windows 7 Msvcp71.dll And Msvcr71.dll Missing Error
- 手机无须ROOT不用修改hosts即可在本地测试安卓、苹果APP和H5应用
- linux Cron 执行Django 任务计划
- 我的第三篇博客(激动激动真激动!!!)A-B Problem
- 电话号自动识别之bug解决汇总
- vmware workstations下安装CentOS7
- [vue]vue双向绑定$on $emit sync-模态框
- glide 解决 golang.org/x/net 等依赖包无法获取
- 如何在ajax请求中设置特殊的RequestHeader
- windows rails new demo时候出错Make sure that `gem install mysql2 -v '0.3.15'` succeeds before bundling.
- C#代码处理网页关于登录的code
- Django练习
- Linux系统——rpm命令
- 使用python处理selenium中的css_selector定位元素的模糊匹配问题