wchar_t

VC++ 字符串操作学习总结

北慕城南 提交于 2019-11-27 03:01:36
vc++中各种字符串(转载) http://www.cnblogs.com/tomin/archive/2008/12/28/1364097.html CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常 量的TCHAR指针。 CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。 typedef OLECHAR FAR* BSTR; typedef const char * LPCTSTR; vc++中各种字符串的表示法 首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传 统的C,C++的兼容。 LP的含义是长指针(long pointer)。LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在 win32中较多地使用LPSTR。 而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变, 除此之外,它与LPSTR是等同的。 1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位

c、c++ char*和wchar*互相转换

淺唱寂寞╮ 提交于 2019-11-26 23:15:56
1. 问题描述   编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes。在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为char*的字符串,有时还需要把char*类型的字符串转换为wchar*类型。下面提供几种解决方案。 2. 解决方案 2.1 wchar* 转到 char*   方法一,使用_bstr_t转换。    #include <comdef.h> // you will need this const WCHAR* wc = L"Hello World" ; _bstr_t b(wc); const char* c = b; printf("Output: %s\n", c);   方法二,使用conversion macros。   包含在头文件#include <atlconv.h>中,使用需谨慎!因为转换字符串分配的空间在栈上,直到函数返回才释放。如归使用很多次,例如在递归函数里使用,容易造成内存溢出。 USES_CONVERSION; WCHAR* wc = L"Hello World" ; char* c = W2A(wc);   方法三,使用sprintf,比较简洁。    char output[256]; WCHAR* wc = L"Hellow World" ;

Windows字符串类型【转】

丶灬走出姿态 提交于 2019-11-26 18:31:30
原文:http://www.cnblogs.com/cchyao/archive/2010/09/16/1827793.html C++主要使用的是C-Style字符串,而M$在Windows中又增加了很多C-Style字符串的变体。这个一多嘛,就容易乱~ 所谓字符串,就是由字符组合而成,所以我们先来将将字符类型。 首先,存在两种最基本的字符类型:char和wchar_t。char大家都很熟悉了,我就跳过。至于wchar_t,是应用于UNICODE的宽字符,即一个字符2Bytes,16Bits。事实上,Windows中利用 typedef unsigned short wchar_t 定义wchar_t 然后为了书写方便(MS我也没觉得有多大差别),M$又把那两个基本字符类型重新的给他typedef了一遍,即: typedef char CHAR typedef wchar_t WCHAR 为了使得兼容性更加,M$又定义了TCHAR数据类型: #ifdef UNIOCDE typedef WCHAR TCHAR #else typedef CHAR TCHAR #end if 这样,你不用关心是要使用ANSI字符串还是Unicode,编译器会自动根据你的OS来选择。 然后,M$又利用上面的几种基本数据类型,定义了一些字符串指针类型。 LPSTR和LPCSTR