首页 > 教育学习 > 为什么 > 您是怎么记忆 C/+/+ /VC/+/+ 的类型转换的呢?

您是怎么记忆 C/+/+ /VC/+/+ 的类型转换的呢?
2012-01-19 20:01:37   来源:   点击:

    您是怎么记忆 C/+/+ /VC/+/+ 的类型转换的呢?char*, const char*,wchar_t*, const wchar_t*,string, CString, LPSTR, LPCTSTR, LPWSTR等等等等无数坑死人的类型转换,大家是如何记住的?有些类型的本质是什么?为什么要使用它们?在哪里可以找到这些转换方式?

    9 个答案

    • 答案 1:

      先记最原始的 ANSI 字符串 LPSTR, 被定义成 char *.LPCSTR 比 LPSTR 多了个 C, 意思是 const, 所以 LPCSTR 是 const char *.后来 XP 后 微软又把所有 API 增加了 Unicode 版本(实际是重新开发), 于是在 LPSTR 基础上加了个 W ,即 LPWSTR, 被定义成 wchat_t.同理 LPCWSTR 被定义成 const wchar_t *.可是怎么兼容 以前的 ANSI 版本的 API 呢? 微软用 带 T 的宏 来解决的。如果 定义了Unicode那么 TCHAR 被定义成 WCHAR (就是 wchar_t) LPTSTR 被定义成 LPWSTR (wchar_t *) LPCTSTR 被定义成 LPCWSTR (const wchar_t *)否则 /* 那就是用了 ANSI 版本了 */ TCHAR 被定义成 CHAR (就是 char 了) LPTSTR 被定义成 LPSTR (char *) LPCTSTR 被定义成 LPCSTR (const char *)对应的,实际的函数名 以 A 结尾的 对应 ANSI 版本,而以 W 结尾的 对应的 Unicode 版本.(其实 ANSI 版本现在都是 将参数先转成 宽字符,再调用 Unicode 版本)比如 MessageBoxA 和 MessageBoxW最后我们用的 MessageBox, 其实也是宏:如果 定义了Unicode那么 MessageBox 就是 MessageBoxW否则 MessageBox 就是 MessageBoxA在平时的时候,char * 与 const char * 之间的显式转换很少, 即使用到也很容易转.偶尔麻烦的就是 ANSI 和 Unicode 之间的转换,有俩API:Unicode- > ANSI: WideCharToMultiByteANSI- > Unicode: MultiByteToWideChar说真的,这俩 API 若是频繁用到,看定义都麻烦. 所以最好自己稍微做封装一下. 以后直接用自己封转后的版本就好了.
    • 答案 2:

      WCHAR.H中:typedef unsigned short wchar_t;WINNT.H 中typedef char CHAR;typedef wchar_t WCHAR;typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, *PSTR;typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR;数据类型中有L,N指的是near和long,有P指的是指针,有C指的是有const修饰,有W指的是宽字符。有UNICODE标识符情况下:typeddef WCHAR TCHAR, * PTCHAR;typeddef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR;typeddef LPCWSTR LPCTSTR;
    • 答案 3:

      我想说的,前面的几位都已经说得七七八八了,其实主要是ANSI和UNICODE两类,但形式上,也可以分标准C/C++和windows api两类。你上面列出的,一种是C/C++里面的,如char*、const char*之类,一种是windows api里面的,如LPSTR,LPCTSTR之类的,这些是微软通过宏定义帮前面的char*、const char*等类型起了一个新的名字而已,实质和前面的一样。当你用到他们时,你可以当光标放到这些类型上,然后F12就可以看到他的原貌了。还有CString这些是MFC,ATL里面的,CString是一个类,类也是一种类型。除了上面你列出的那些,其实还有针对COM的字符串类型、、、
    • 答案 4:

      const是修饰符,其转换参考C++对const的规定;LPSTR, LPCSTR等是宏,其实都可以推算到char*, const char* 或者 wchar_t*, const wchar_t*等实际类型除去这些,Windows下VC++中的字符串类型基本就是:char *, wchar_t*,_bstr_t, CComBSTR, CString, basic_string, System.String.MSDN很好的总结了这些字符串之间的转换:msdn.microsoft.com/en-US...
    • 答案 5:

      对c标准,c++标准以外的类型无视。
    • 答案 6:

      没必要全记住,用的时候现查msdn也来得及
    • 答案 7:

      现用现查
    • 答案 8:

      没刻意记过,用的时候不会就查;用的多了自然而然就记住了
    • 答案 9:

      用多了就记住了

相关热词搜索:

上一篇:简单地讲一讲,一个社会人应当如何处理自身与权利的关系?
下一篇:怎么解决常常对薪资不满,想跳槽的欲望?