C++ TCHAR* 与char* 互转

在MSDN中有这么一段:

Note: The ANSI code pages can be different on different computers, or can be changed for a single computer, leading to data corruption. For the most consistent results, applications should use Unicode, such as UTF-8 (code page 65001) or UTF-16, instead of a specific code page, unless legacy standards or data formats prevent the use of Unicode. If use of Unicode is not possible, applications should tag the data stream with the appropriate encoding name when protocols allow it. HTML, XML, and HTTP files allow tagging, but text files do not.

大概意思就是说ANSI页码的文件可能会根据不同的计算机而改变,建议使用unicode(UTF-8或UTF-16)的编码

而VS默认就使用unicode编码

ANSI:char, string …

UNICODE: TCHAR, wchar_t …

MSDN里给我们提花了两个函数

MultiByteToWideChar

int MultiByteToWideChar(

UINT CodePage,

DWORD dwFlags,

LPCSTR lpMultiByteStr,

int cbMultiByte,

LPWSTR lpWideCharStr,

int cchWideChar

);

WideCharToMultiByte:

int WideCharToMultiByte(

UINT CodePage,

DWORD dwFlags, 

LPCWSTR lpWideCharStr,

int cchWideChar,

LPSTR lpMultiByteStr, 

int cbMultiByte,

LPCSTR lpDefaultChar,

LPBOOL lpUsedDefaultChar

);

互转的实现:

char* StrUtils::TCHAR2char( const TCHAR* STR )

{

//返回字符串的长度

int size = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, FALSE);

//申请一个多字节的字符串变量

char* str = new char[sizeof(char) * size];

//将STR转成str

WideCharToMultiByte(CP_ACP, 0, STR, -1, str, size, NULL, FALSE);

return str;

}

TCHAR* StrUtils::char2TCAHR( const char* str )

{

int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);

TCHAR* retStr = new TCHAR[size * sizeof(TCHAR)];

MultiByteToWideChar(CP_ACP, 0, str, -1, retStr, size);

return retStr;

}
时间: 2024-10-19 20:55:41

C++ TCHAR* 与char* 互转的相关文章

TCHAR和CHAR类型的互转

http://blog.csdn.net/ahjxly/article/details/8494217 http://blog.csdn.net/b_h_l/article/details/7581519 http://blog.chinaunix.net/uid-339069-id-3402668.html 没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换. void TcharToChar

CString与char *互转总结

1 前言 今天在网上看论坛,发现大家对CString与Char *互转各说一词,其实我发现提问者所说的情况与回答问题的人完全不是同一情况,这里做一总结. 首先大家得清楚一件事,一般在网上提出问题的人大部分使用的都是VC,那么你就应该知道,在VC下编程,工程属性中有一属性Charecter Set属性,其值可以设置为Use Multi-Byte Charecter Set 和 Use Unicode Charecter Set 这两种选择,具默认情况下工程是采用了Use Unicode Chare

Windows/MFC,C++中的TCHAR体系/char体系/WCHAR体系及其相互转换

</pre><pre> Windows/MFC,C++编程中经常遇到UNICODE.ANSI字符串,并需要对这些字符串进行转换,本文对这些体系与其转换进行了总结. 第一篇:基础篇 3大体系常用函数及解析详见博文:http://blog.csdn.net/u010003835/article/details/47344775  此外,接下来我书写的函数以Windows对char*,TCHAR*,const  TCHAR*的命名规则来书写 不熟悉的童鞋可以参考博文: http://bl

wchar_t* 和char* 互转

//将单字节char*转化为宽字节wchar_t* wchar_t* AnsiToUnicode(const char* szStr){ int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0); if (nLen == 0) { return NULL; } wchar_t* pResult = new wchar_t[nLen]; MultiByteToWideChar(CP_ACP, MB_PREC

CString和char互转

CString转char: CString m_Readcard; char ReaderName[22]; strcpy((char*)&ReaderName,(LPCTSTR)m_Readcard); char 转CString: CString m_Readcard; char ReaderName[22]; CString m_Readcard(ReaderList); 原文地址:https://www.cnblogs.com/Pond-ZZC/p/9172440.html

String,CString,TCHAR,char之间区别和联系

char是类型TCHAR也是!不过他可以通过是否定义了UNICODE宏来判断到底是char还是w_char; TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符 #ifdef UNICODE   typedef wchar_t TCHAR;   #else   typedef char TCHAR;   #endif 所以用MBCS来build时,TCHAR是char,使用UN

char与TCHAR相互转化

char与TCHAR相互转化 char strUsr[10] = "Hello"; TCHAR Name[100]; #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, strUsr, -1, Name, 100); #else strcpy(Name, strUsr); #endif TCHAR转char char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn) { LPSTR pszOut = NULL;

typedef char TCHAR, *PTCHAR; 是什么意思?

原来,它就等价于 typedef char TCHAR;typedef char *PTCHAR; PTCHAR相当于char*

CString char BSTR 转换

转自:http://www.cnblogs.com/lingyun1120/archive/2011/11/03/2234169.html 一.CString, int, string, char*之间的转换 string 转 CStringCString.Format("%s", string.c_str());char 转 CString  CString.Format("%s", char*);char 转 string  string s(char *);s