]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re"> C++ 数据类型转换 - 11GX
首页 > C++ 数据类型转换

C++ 数据类型转换

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....

#include

// 使用CString必须使用MFC,并且不可包含

#define _AFXDLL

#include

using namespace std;

//----------------------------------------------------------------------------------

//将 单字节char* 转换为 宽字节 wchar*

inline 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_PRECOMPOSED, szStr, -1, pResult, nLen );

return pResult;

}

//----------------------------------------------------------------------------------

// 将 宽字节wchar_t* 转换 单字节char*

inline char* UnicodeToAnsi( const wchar_t* szStr )

{

int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );

if (nLen == 0)

{

return NULL;

}

char* pResult = new char[nLen];

WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );

return pResult;

}

//----------------------------------------------------------------------------------

// 将单字符 string 转换为宽字符 wstring

inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr )

{

int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );

wszStr.resize(nLength);

LPWSTR lpwszStr = new wchar_t[nLength];

MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );

wszStr = lpwszStr;

delete [] lpwszStr;

}

//----------------------------------------------------------------------------------

int _tmain(int argc, _TCHAR* argv[])

{

char*  pChar = "我喜欢char";

wchar_t* pWideChar = L"我讨厌wchar_t";

wchar_t  tagWideCharList[100] ;

char  ch = 'A';

char  tagChar[100] = {NULL};

CString  cStr;

std::string str;

// 注:设置语言环境以便输出WideChar

setlocale(LC_ALL,"chs");

// 注: char* 转换 wchar_t*

// 注: wchar_t 未重载 << ,所以不可使用 cout << 输出

pWideChar = AnsiToUnicode( pChar );

// 注:printf("%ls") 和 wprintf(L"%s") 一致

printf( "%ls ", pWideChar );

// 注:wchar_t* 转换 wchar_t[]

wcscpy ( tagWideCharList, pWideChar );

wprintf( L"%s ", tagWideCharList );

// 注:wchar_t[] 转换 wchar_t*

pWideChar = tagWideCharList;

wprintf( L"%s ", pWideChar );

// 注:char 转换 string

str.insert( str.begin(), ch );

cout << str << endl;

// 注:wchar_t* 转换 string

pWideChar = new wchar_t[str.length()];

swprintf( pWideChar, L"%s", str.c_str());

wprintf( L"%s ", pWideChar );

// 注:string 转换 char*

pChar = const_cast(str.c_str());

cout << pChar << endl;

// 注:char* 转换 string

str = std::string(pChar);

// 注: cout 的 << 重载了string, 若printf 的话必须 printf("%s", str.c_str());

//  而不可 print( "%s", str ); 因为 str 是个 string 类

cout << str << endl;

// 注:string 转换 char[]

str = "无聊啊无聊";

strcpy( tagChar, str.c_str() );

printf( "%s ", tagChar );

// 注:string 转换 CString;

cStr = str.c_str();

// 注:CString 转换 string

str = string(cStr.GetBuffer(cStr.GetLength()));

// 注:char* 转换 CString

cStr = pChar;

// 注:CString 转换 char*

pChar = cStr.GetBuffer( cStr.GetLength() );

// 注:CString 转换 char[]

strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));

// 注:CString 转换 wchar_t*

pWideChar = cStr.AllocSysString();

printf( "%ls ", pWideChar );

}

____________________________________________________________________________________________

CString 转 wchar_t

CString path = "asdf";

wchar_t wstr[256] = path.AllocSysString();

或者:

wchar_t wcstring[256];

MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

wchar_t转CString

WideCharToMultiByte(CP_ACP,0,wcstring,256,

path.GetBuffer(0),256,NULL,NULL);

path.ReleaseBuffer(0);

string 转 CString

CString.format("%s", string.c_str());

char 转 CString

CString.format("%s", char*);

char 转 string

string s(char *);

string 转 char *

char *p = string.c_str();

CString 转 string

string s(CString.GetBuffer());

CString str = "fdjfdas";

string s = (LPCTSTR)str;

1,string -> CString

CString.format("%s", string.c_str());

用c_str()确实比data()要好.

2,char -> string

string s(char *);

你的只能初始化,在不是初始化的地方最好还是用assign().

3,CString -> string

string s(CString.GetBuffer());

GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

转载于:https://www.cnblogs.com/sea918/archive/2010/07/02/1770192.html

更多相关:

  • char* Reverse(char* s) {//将q指向字符串最后一个字符char* q = s ;while( *q++ ) ;q -= 2 ; //分配空间,存储逆序后的字符串。char* p = newchar[sizeof(char) * (q - s + 2)] ; char* r = p ;// 逆序存储whil...

  • 二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {"abc", "def", "ghi"}; 这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char *...

  • 今天在弄一下啊小小程序的时候。报错,出现了问题。先看代码 int main(int argc, char* argv[]) {char *filename = "interface_ipset_1_1.json";char* split1 = "_";char* split2 = ".";char splitfile1[4][...

  • 问题的提出:设计一个用于管理朋友信息的程序。将朋友信息(年龄、姓名、电话)存放在MyFrd.dat中,从文件读出这些信息并显示,并能按姓名(要求可简化输入,如只输入姓氏便可查询)进行查询,将查询信息输出屏幕。 1 #include 2 #include 3 #include<...

  • 工作中多次遇到Python版本的签名算法,需要用Go版本再实现一遍,这就需要牵扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.QueryEscape的关系。 下面直接给出它们的关系: urllib.quote_plus(str)等同于url.QueryEscape(s...

  • C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c++引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心...

  • 思路 大体思路:数据结构选用栈,读到左括号时入栈,读到右括号时判断是否匹配,匹配则左括号出栈,非括号字符则继续往下读 代码 #include #include #include using namespace std;bool is_match_parentheses(co...

  • 方法1: Controller

  • str = Regex.Replace(str, @"]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re...