读书人

关于字符集解决办法

发布时间: 2012-02-23 22:01:34 作者: rapoo

关于字符集
不太清楚

这个几个东西

_tcscmp

strcmp

wstrcmp

StrCmp



[解决办法]
早啊,上班前先回个贴子:)

strcmp 是用于 assii 字符集的

wstrcmp 是用于 Unicode 字符集的

_tcscmp 其实调用的是 strcmp 或者 wstrcmp 具体根据你的工程字符集属性配置,在工程属性面版里

StrCmp 是操作系统函数, 虽然说都是比较字符串,但一般这个函数更优越些,因为它是操作系统函数

但是它的功能并不完全和上面的c函数一样,它应该调用的是api CompareString


随便说一下,说错了请星辰老大指出

98 是 assii 系统

2000 是 unicode 系统,也支持 assii,在2000内部,所有api都是用unicode实现

如果你调用的是assii版本的api如 CreateWindowA 那么实际上系统会做内存分配,先转成uncode

字符,如果调用 CreateWindowW

所以在2000的机器上uncode程序比assii程序性能好很多


你们可以测测

#include "mmsystem.h "
#include "shlwapi.h "

#pragma comment(lib, "winmm.lib ")
#pragma comment(lib, "shlwapi.lib ")

void main()
{
TCHAR ch[] = _T( "testtesttesttest ");

DWORD s = timeGetTime();

for (int i = 0; i < 10000000; i++)
{
//StrCmp(ch, _T( "testtesttesttest "));
_tcscmp(ch, _T( "testtesttesttest "));
}

DWORD d = timeGetTime();

cout < <d - s < <endl;

system( "pause ");
}


我的系统输出的时间差分别是

unicode _tcscmp : 1000
assii _tcscmp : 4000

unicode StrCmp : 950
assii StrCmp : 4100

都是debug版

大家可以把你们的结果列出来看看

[解决办法]
_tcscmp一个宏
根据程序使用的编码 在编译前 替换成 strcmp 或者 wstrcmp
strcmp和wstrcmp区别在于前者使用ascii后者使用unicode(双字节)编码
StrCmp也是一个宏
根据不用的编码替换成StrCmpA或者StrCmpW
前者使用ascii后者使用unicode(双字节)编码

读书人网 >C++

热点推荐