Skip to content

VC Unicode C与ANSI C部分函数对照

2010 六月 1
by 荒野无灯

最近折腾VS 2008,发现仅会C语言还不够,得会VC 中的C语言。
C源文件的最顶部一定要加:

1
#include "stdafx.h"

win32 窗口程序入口点为:

1
2
3
4
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)

而不是

1
int main(int argc,char ** argv)

字符变量用TCHAR 而不是 char ,不然有麻烦。
stdafx.h默认没有包含ANSI C的stdio.h,要在stdafx.h添加

1
#include <stdio.h>

才能用ANSI C 的fopen等IO函数。
所有字符串都要用TEXT()或者_T() 宏将之括起来,不然也会有麻烦。

1
2
TCHAR buffer[256];
sizeof(buffer)/sizeof(TCHAR)

(括号内是宽字符时的表示方式)

TCHAR代替char(wchar_t)
msdn的说明:

1
typedef char TCHAR;

还说,TCHAR 可以表示WCHAR 和char ,根据你是否定义了UNICODE 。(TCHAR is defined as wchar_t in a Unicode build, but as char in a non Unicode build. )
http://msdn.microsoft.com/en-us/library/cc842072.aspx

LPTCH、PTCH、PTSTR、LPTSRT代替char*(wchar_t*)

LPCTSTR代替const char(const wchar_t*)

TEXT(“string”)代替”string” (L“string”)

wcslen()或者lstrlen(); 代替strlen();

lstrcpy(); 代替strcpy()

lstrcpyn(); 代替strcpyn()

lstrcat(); 代替strcat()

wcscmp() 或者 lstrcmp();代替strcmp() 见http://msdn.microsoft.com/en-us/library/e0z9k731.aspx
另_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l (注:wcsicmp等已经不建议使用了,用_wcsicmp代替) 见:http://msdn.microsoft.com/en-us/library/k59z8dwe%28v=VS.80%29.aspx

lstrcmpi(); 代替strcmpi()

wsprintf();代替sprintf ();(swprintf();)

wvsprintf();代替vsprintf();(vswprintf();)

这样无论我们再Unicode环境还是ASCNII环境,都不用重写代码。

Unicode和ASCII最大的区别就是 Unicode采用2个字节来存储一个字符,而ASCII采用一个字节存储一个字符,所以对于英文的编码,那是足够的了,对于汉字的编码ASCII要用2个ASCII字符来表示一个汉字。

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=3861

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <q cite=""> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS