Win32中的字符串

W版本和A版本的Win32API

A:ANSI字符集; W:wide Unicode字符集。windows支持UnicodeANSI编码的字符。

在User32.dll中导出的函数实际上没有MessageBox,只有MessageBoxA和MessageBoxW,这两者是同一个API,实现了同样的功能。不同的是,MessageBoxA以多字节字符串作为参数输入,MessateBoxW以Unicode字符串作为参数输入。但如果在编写程序时,使用的字符集与代码中使用的函数不一致、定义的字符串变量不兼容,将会引起编译错误或者运行程序显示乱码,甚至可能引起程序运行错误,这一点需要引起注意。

Unicode字符集和多字节字符集

多字节字符集:MBCS(Multi-ByteCharacterSystem),即熟知的ANSI字符集。使用单字节方式编。ANSI字符集,它的正式名称应该是MBCS(Multi-ByteChactacterSystem,即多字节字符系统)

Unicode(wideCharacter-set):宽字节字符集(统一码,万国码)使用双字节编码,utf-8是其子。

Windows既可以使用Unicode字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求。与传统的字符集编码相比,Unicode是世界通用的字符编码标准,使用16位数据表示一个字符,一共可以表示65535种字符。传统的字符集,如WindowsASNI字符集,使用8位数据或将相邻的两个8位的数据组合在一起表示特殊的语言字符。当人们在看网页或文档时,有时出现乱码,通常他使用了ANSI字符集,应改为Unicode统一码字符集,毕竟他是世界通用的。

  • ANSI操作函数以str开头strcpy
  • Unicode操作函数以wcs开头wcscpy
  • MBCS操作函数以_mbs开头_mbscpy

Win32中的字符串

在C,C++语言中没有字符串这种数据类型,表示字符串通常使用字符指针或字符数组。

ANSI

Unicode

ANSI/Unicode根据环境来确定

字符

CHAR

char

WCHAR

wchar_t

TCHAR

字符串

LPSTR

char*

LPWSTR

wchar_t*

LPTSTR

常量字符串

LPCSTR

LPCWSTR

LPCTSTR

字符串初始化

"string"

L"string"

TEXT("string")

修改字符集:项目属性->常规->字符集:使用Unicode的字符集、使用多字节字符集。

一般,新建工程默认的字符集都是Unicode的(但新建的空项目默认为ANSI)。为此,我们在定义字符串时,应该常用LPTSTR类型,及TEXT宏,_T宏与TEXT宏相同,不过要添加tchar.h头文件。

  • 对于MBCS字符串连接,复制,比较,求长运算为:strcat,strcpy,strcmp,strlen
  • 对于Unicode字符串连接,复制,比较,求长运算为:wcscat,wcscpy,wcscmp,wcslen;wcs(wide character-set)宽字节字符集
  • 根据开发环境的设置来自动适应:_tcscat,_tcscpy,_tcscmp,_tcslen

它们之间的相互转换

LPWSTR->LPTSTR: W2T();
LPTSTR->LPWSTR: T2W();
LPCWSTR->LPCSTR: W2CT();
LPCSTR->LPCWSTR: T2CW();

ANSI->UNICODE: A2W();

UNICODE->ANSI:W2A();

你可能感兴趣的:(Win32)