现在C++的字符分成两种类型wchar_t和char。
其中 WCHAR==wchar_t,CHAR==char。
TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。
CHAR实施上就是unsigned char,
WCHAR为宽字符,
而TCHAR根据是否支持unicode而不同。
在程序使用sizeof(TCAHR),当默认设置时,这个值是1;
当定义UNICODE宏时,这个值是2。
BSTR是BASICA中的字符串在C++中的表示方法,它是一种带有字符计数的wchar_t类型的字符串,SysAllocString, SysFreeString这两个函数是Windows中专门处理BSTR的函数(属于COM函数)。
各种类型之间是可以进行强制转换的(有些有专有的函数比如wchar_t和char的相互转换)
/
WCHAR,CHAR,TCHAR的关系实际上是这样的
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
#endif
typedef unsigned char CHAR;
typedef unsigned wchar_t WCHAR;
//wchar_t 16-bit predefined type for wide characters. Unsigned
A BSTR, known as basic string or binary string, is a pointer to a wide character string used by Automation data manipulation functions.
typedef OLECHAR FAR* BSTR;
BSTRs are wide, double-byte (Unicode) strings on 32-bit Windows platforms and narrow, single-byte strings on the Apple® PowerMac™.
因而不能直接进行强制转换,系统提供了一些宏进行转换如OLE2T,T2OLE。
另外 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当 BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。管理的函数就诸如SysAllocString, SysFreeString。BSTR是一个比较复杂的数据类型,系统有许多关于他的操作和封装对象,应该看一些有关方面的书。其他的问题请提的具体些,并且多给一点分。
//
1.char* to wchar*
WCHAR* ToWChar(char * str)
{
static WCHAR buffer[1024];
wcsset(buffer,0);
MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);
return buffer;
}
2 wchar* to char*
(1)use WideCharToMultiByte
uchar wszSomeString[1024];
char szANSIString [MAX_PATH];
WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
(2)use W2A:
USES_CONVERSION;
pTemp=W2A(wszSomeString);
///
1. char * --> UNICODE WCHAR *
CComBSTR bstr(str);
2. UNICODE WCHAR*到 char *
CString str(wchar*);
char 8 字节 :
char *p = "hello";
char p[] = "hello";
宽字符
typedef unsigned short wchar_t;
wchar_t 16 字节;
wchar_t c = 'A';
wchar_t Cw = L"hello"; 14 字节 --->最后还有一个0;
L : 告诉编译器,按宽字符保存;strlen(const char*) //用于计算单字符的长度
wcslen(const wchar_t*); //用于计算宽字符的长度。
strlen(p); 如果两个混用将出现错误;
wcslen(cw); ---〉== 6;(自动去掉末尾的0)
还有一些函数:
wprintf, ----printf
wsprintf, ----sprintf
wvsprintf ----vsprintf
获取长度:
LPCTSTR strTmp : lstrlen( LPCTSTR lpString );
char *strTmp : strlen( const char *string );
_bstr_t strTmp : wcslen( const wchar_t *string );