您的位置:首页 > 其它

string、wstring、cstring、 char、 tchar、int、dword转换方法

2014-11-19 18:29 281 查看
最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多:
1》string转wstring
wstrings2ws(conststring&s)
{
_bstr_tt=s.c_str();
wchar_t*pwchar=(wchar_t*)t;
wstringresult=pwchar;
returnresult;
}
2》wstring转string
stringws2s(constwstring&ws)
{
_bstr_tt=ws.c_str();
char*pchar=(char*)t;
stringresult=pchar;
returnresult;
}
3》string转cstring
a)CString.format("%s",string.c_str());
b)CStringStringToCString(stringstr)
{
CStringresult;
for(inti=0;i<(int)str.length();i++)
{
result+=str[i];
}
returnresult;
}
4》cstring转string
a)voidConvertCString2string(CString&strSrc,std::string&strDes)
{
#ifndefUNICODE
strDes=strSrc;
#else
USES_CONVERSION;
strDes=W2A(strSrc.LockBuffer());
strSrc.UnlockBuffer();
#endif
}
b)
strings(CString.GetBuffer());
ReleaseBuffer();
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.[/code]
c)
stringCStringToString(CStringcstr)
{
stringresult(cstr.GetLength(),'e');
for(inti=0;i<cstr.GetLength();i++)
{
result[i]=(char)cstr[i];
}
returnresult;
}
5》string转char*
a)char*p=string.c_str();
举例:
stringaa("aaa");
char*c=aa.c_str();
stringmngName;
chart[200];
memset(t,0,200);
strcpy(t,mngName.c_str());
b)一个一个字符的赋值
[code]char*p=newchar[sring的长度+1];
p[string的长度]='/0';
但是要注意最后赋值'/0'!!!
char*StringToChar(string&str)
{
intlen=str.length();
char*p=newchar[len+1];
for(inti=0;i<len;i++)
{
p[i]=str[i];
}
p[len]='/0';
}
6》char*转string
strings(char*);
你的只能初始化,在不是初始化的地方最好还是用assign();
stringCharToString(char*arr,intcount){stringresult(arr,4);returnresult;}string是ansi编码字符char[/code]
TCHAR是unicode编码字符wchar_t
7》string转TCHAR*
/*
wBuf申明为指针即可。
*/
wchar_t*chr2wch(constchar*buffer)
{
size_tlen=strlen(buffer);
size_twlen=MultiByteToWideChar(CP_ACP,0,(constchar*)buffer,int(len),NULL,0);
wchar_t*wBuf=newwchar_t[wlen+1];
MultiByteToWideChar(CP_ACP,0,(constchar*)buffer,int(len),wBuf,int(wlen));
returnwBuf;
}

[code]8》TCHAR*转string
char*wch2chr(LPCTSTRlpString){//Calculateunicodestringlength.UINTlen=wcslen(lpString)*2;char*buf=(char*)malloc(len);UINTi=wcstombs(buf,lpString,len);returnbuf;}[/code]
9》string和char*转int
string转int
..............................
char*转int
#include<stdlib.h>

intatoi(constchar*nptr);
longatol(constchar*nptr);
longlongatoll(constchar*nptr);
longlongatoq(constchar*nptr);
10》int转char*和string
在stdlib.h中有个函数itoa()
itoa的用法:
itoa(i,num,10);
i需要转换成字符的数字
num转换后保存字符的变量
11》wstring转Csting[/code]
std::wstring转CString
CStringstr(filename.c_str());
12》Cstring转wstring
CString转std::wstring
std::wstringstr=filename.GetString();
13》Cstring转char*
CStringcstr(asdd);
constchar*ch=(LPCTSTR)cstr;
举例:
CStringstr="iamgood";
char*lp=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
14》char*转Cstring
举例:
CStringstr;
charpStr[100];
str.Format("%s",pStr);
15》TCHar转char
***********************************************************************
*函数:THCAR2Char
*描述:将TCHAR*转换为char*
***********************************************************************
char*CPublic::THCAR2char(TCHAR*tchStr)
{
intiLen=2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
char*chRtn=newchar[iLen+1]
wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值
returnchRtn;
}
16》char转tchar[/code]
定义了UNICODE宏之后,TCHAR就是宽字符wchar_t,否则TCHAR跟char是一样的^_
具体问题具体分析,浮云啊,一切皆是浮云.....
以下摘录自网络:
..............................................................
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”/0“的字符串数组
2,c_str(),返回有”/0“的字符串数组
3,copy()
.................................................................
int转CString:
CString.Format("%d",int);
...............................
string转CString
CString.format("%s",string.c_str());
用c_str()确实比data()要好.
.......................................
char*转CString
CString.format("%s",char*);
CStringstrtest;
char*charpoint;
charpoint="givestringavalue";
strtest=charpoint;//直接付值
...................................................................
CString转int
CStringss="1212.12";
inttemp=atoi(ss);//atoi_atoi64或atol
将字符转换为整数,可以使用atoi、_atoi64或atol。
intint_chage=atoi((lpcstr)ss);
或:
CStringstr="23";
UINTuint;
sscanf(str,"%d",uint);
..............................
string转int
..............................
char*转int
#include<stdlib.h>
intatoi(constchar*nptr);
longatol(constchar*nptr);
longlongatoll(constchar*nptr);
longlongatoq(constchar*nptr);
...................................................................
CString转string
strings(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
..........................................
int转string
..........................................
char*转string
strings(char*);
你的只能初始化,在不是初始化的地方最好还是用assign().
...................................................................
CString转char*
CStringstrtest="wwwwttttttt";
charpoint=strtest.GetBuffer(strtest.GetLength());
CString转换char[100]
chara[100];
CStringstr("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
CStringstr="aaa";
char*ch;
ch=(char*)(LPCTSTR)str;
..........................................
int转char*
在stdlib.h中有个函数itoa()
itoa的用法:
itoa(i,num,10);
i需要转换成字符的数字
num转换后保存字符的变量
10转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
原形:char*itoa(intvalue,char*string,intradix);
实例:
#include"stdlib.h"
#include"stdio.h"
main()
{
inti=1234;
chars[5];
itoa(i,s,10);
printf("%s",s);
getchar();
}
..........................................
string转char*
char*p=string.c_str();
stringaa("aaa");
char*c=aa.c_str();
stringmngName;
chart[200];
memset(t,0,200);
strcpy(t,mngName.c_str());
...................................................................
标准C里没有string,char*==char[]==string
可以用CString.Format("%s",char*)这个方法来将char*转成CString。要把CString转成char*,用操
作符(LPCSTR)CString就可以了。
cannotconvertfrom'constchar*'to'char*'
constchar*c=aa.c_str();
string.c_str()只能转换成constchar*
#include<string>
//使用CString必须使用MFC,并且不可包含<windows.h>
#define_AFXDLL
#include<afx.h>
usingnamespacestd;
//———————————————————————————-
//将单字节char*转换为宽字节wchar*
inlinewchar_t*AnsiToUnicode(constchar*szStr)
{
intnLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szStr,-1,NULL,0);
if(nLen==0)
{
returnNULL;
}
wchar_t*pResult=newwchar_t[nLen];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szStr,-1,pResult,nLen);
returnpResult;
}
//———————————————————————————-
//将宽字节wchar_t*转换单字节char*
inlinechar*UnicodeToAnsi(constwchar_t*szStr)
{
intnLen=WideCharToMultiByte(CP_ACP,0,szStr,-1,NULL,0,NULL,NULL);
if(nLen==0)
{
returnNULL;
}
char*pResult=newchar[nLen];
WideCharToMultiByte(CP_ACP,0,szStr,-1,pResult,nLen,NULL,NULL);
returnpResult;
}
//———————————————————————————-
//将单字符string转换为宽字符wstring
inlinevoidAscii2WideString(conststd::string&szStr,std::wstring&wszStr)
{
intnLength=MultiByteToWideChar(CP_ACP,0,szStr.c_str(),-1,NULL,NULL);
wszStr.resize(nLength);
LPWSTRlpwszStr=newwchar_t[nLength];
MultiByteToWideChar(CP_ACP,0,szStr.c_str(),-1,lpwszStr,nLength);
wszStr=lpwszStr;
delete[]lpwszStr;
}
//———————————————————————————-
int_tmain(intargc,_TCHAR*argv[])
{
char*pChar=“我喜欢char”;
wchar_t*pWideChar=L”我讨厌wchar_t”;
wchar_ttagWideCharList[100];
charch=‘A’;
chartagChar[100]={NULL};
CStringcStr;
std::stringstr;
//注:设置语言环境以便输出WideChar
setlocale(LC_ALL,”chs”);
//注:char*转换wchar_t*
//注:wchar_t未重载<<,所以不可使用cout<<输出
pWideChar=AnsiToUnicode(pChar);
//注:printf(”%ls”)和wprintf(L”%s”)一致
printf(“%ls/n”,pWideChar);
//注:wchar_t*转换wchar_t[]
wcscpy(tagWideCharList,pWideChar);
wprintf(L”%s/n”,tagWideCharList);
//注:wchar_t[]转换wchar_t*
pWideChar=tagWideCharList;
wprintf(L”%s/n”,pWideChar);
//注:char转换string
str.insert(str.begin(),ch);
cout<<str<<endl;
//注:wchar_t*转换string
pWideChar=newwchar_t[str.length()];
swprintf(pWideChar,L”%s”,str.c_str());
wprintf(L”%s/n”,pWideChar);
//注:string转换char*
pChar=const_cast<char*>(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/n”,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/n”,pWideChar);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: