win32 vc++编程中字符串使用问题总结

来源:赵克立博客 分类: C/C++ 标签:C/C++发布时间:2017-10-28 14:26:10最后更新:2017-10-28 15:48:21浏览:2063
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-10-28 15:48:21
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

在Windows编程中,需要使用很多的API函数,其中有很多有字符串参数,这就涉及到了字符串处理

字符现在有两种编码方式-------ANSI和Unicode(GBK算在ANSI中),这就需要为每一种编码单独涉及一套处理函数。

C标准库就是有两种字符串函数:

一种str开头,处理ANSI字符串。

一种wcs开头,处理Unicode字符串。

Windows系统API库,也是有两种函数:

一种以A结尾,ANSI参数型函数

一种以W结尾,Unicode参数型函数

入口点都有两种:

控制台型,main和wmain

GUI型,WinMain和wWinMain

这样为了处理两种字符编码,就要重新改写现有代码。很麻烦。

Microsoft提供了一种ANSI/Unicode通用的解决方法。

1.对于字符和字符串的通用类型

TCHAR 宏-----------代替char或wchar_t

TEXT() 宏------------代替“”或L“”,解决字符串编码问题

LPTSTR-------------指向TCHAR的指针(LP在64位上是长指针)

LPCTSTR-----------指向Const TCHAR的指针

2.运行库函数(使用宏自动转换)

宏 _tcsXXX--------代替以前的strXXX的ANSI函数和wcsXXX的Unicdoe函数

宏 _ttoi-----会在atoi和_wtoi()之间转换

3.系统API函数

通过定义宏,直接使用函数原型,不要后面的A或者W。

4.入口点函数

_tmain---------代替main或者wmain

_tWinMain-----代替WinMain或者wWinMain

在代码中使用Unicode字符串的方法:

只使用运行时函数--------------定义_UNICODE宏

使用Windows函数--------------定义UNICODE宏

通常情况下,这两个宏都需要定义。

字符串使用总结

字符串对照表

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"

_T("string")


vs中字符集相关

修改字符集:项目属性->常规->字符集:使用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();



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python