文档章节

VS中字符集的Unicode和多字节字符集的区别

LoSingSang
 LoSingSang
发布于 02/21 17:22
字数 585
阅读 4
收藏 0

VS中字符集的Unicode和多字节字符集的用处,注意是 用处
所以不赘述具体编码方式。网上一大片。

ANSI编码(使用""包裹)
Unicode编码(使用L""包裹)

----------------------------------------------------------------------------------------------------------------

1

Winodows API有两种,一种W结尾,一种A结尾。
W结尾API,对应Unicode字符集。
A结尾API,对应ANSI多字节字符集。

1.VS新建工程,在主函数里随便输入个Win32API,例如“CreateProcess()”
2.设置字符集为多字节字符集
3.F12查看“CreateProcess()”函数定义,如下:
#ifdef UNICODE
#define CreateProcess  CreateProcessW
#else
#define CreateProcess  CreateProcessA
#endif // !UNICODE
//CreateProcessA会高亮,表示ANSI版本
//“CreateProcess()”所映射到的函数会根据所设置的字符集自动选择,当然,也可以手动选择使用哪个版本的函数。
4.设置为Unicode字符集,CreateProcessW()会变为高亮,表示使用宽字符版本,他们所使用的参数有所区别,W版本必须使用宽字符,如wchar_t、std::wstring。

----------------------------------------------------------------------------------------------------------------

2

在Win32API中,其参数大多形如LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR等。

它们是Win32和VC++所使用的一种字符串数据类型。其实
LP:指针
C:const
W:wide宽字符
T:表示在Win32环境中, 有一个_T宏,通用
STR:表示这个变量是一个字符串

因为受字符集的影响,所以需要区分是否使用宽字符,因此使用T宏来自动推断使用哪一种类型。

常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时, 字符串"abcd"就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。

----------------------------------------------------------------------------------------------------------------

3

LPCTSTR
#ifdef UNICODE
#define LPCTSTR LPCWSTR
#else
#define LPCTSTR LPCSTR
#endif

TCHAR
当没有定义_UNICODE宏时,TCHAR = char,_tcslen =strlen
当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。

----------------------------------------------------------------------------------------------------------------

4

参考:

https://bbs.csdn.net/topics/70298966
https://blog.csdn.net/stephen1315/article/details/7476236
https://baike.baidu.com/item/TCHAR/1865865?fr=aladdin
https://blog.csdn.net/w343051232/article/details/7083276

© 著作权归作者所有

共有 人打赏支持
LoSingSang
粉丝 3
博文 67
码字总数 30454
作品 0
深圳
程序员
私信 提问
Unicode字符集下CString与char *转换

在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操...

云栖希望。
2017/12/04
0
0
Windows核心编程(3)字符编码详解

一、字符编码 详细介绍 1.字节(Byte)是一种计量单位,他是计算机信息技术存储容量的一种单位 2.字符的意义: 字符数计算机文字中使用的文字和符号,比如1,2,3,4,~,@,!,%,^等待 3.在不同编码里字...

超级极客
2018/06/26
0
0
VC常用的宏的含义

一、字符编码宏 Windows即可以使用Unicode字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求。 与传统的字符集编码器相比,Unicode是世界通用的字符...

tomy000
2014/08/15
0
0
Oracle varchar2或char类型的byte和char的区别

Oracle定义字符串类型VARCHAR2和CHAR指定长度的用法如下: varchar2( ) 是介于1~4000之间的一个数,表示最多占用4000字节的存储空间。 char( ) 是介于1~2000之间的一个数,表示最多占用2000字...

技术小胖子
2017/11/14
0
0
VC++6.0与VS2010的区别

区别1:字符串的表达 void CMy123Dlg::OnBnClickedButton1() { // MessageBox("你好");//以前VC6.0写法,现在用不了.老版本用的多字节字符集 // MessageBox(L"你好");//L 是 unicode字符集,可移......

霄霄月月
2012/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
42分钟前
2
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
今天
1
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
7
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部