VC++中string、Cstring、char*、wchar*、float、int、double之间的转换

6 篇文章 0 订阅
3 篇文章 0 订阅

Cstring、string、float、int、double之间的转换

(多字节字符 英文1个字节,中文2个字节 ,unicode 英文2字节 中文2字节)


一,宽字节wchar_t* 和 单字节char*之间的转换

wchar_t是Unicode字符的数据类型,它实际定义在<string.h> 里: typedef unsigned short wchar_t;不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。

wchar_t *wsz = L"wchar_t";

// 使用CString必须使用MFC,并且不可包含<windows.h>
(1)将单字节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;
}
(2)将宽字节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;
}
(3) 将单字符 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;
}

二,string、float、int、double,char*,wchar_t之间的转换

(1)短整型(int)转string
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换 
(2)长整型(long)转string
ltoa(l,temp,10); 
(3)浮点数(float,double)转string
用fcvt可以完成转换,这是MSDN中的例子:
int decimal, sign; 
char *buffer; 
double source = 3.1415926535; 
buffer = _fcvt( source, 7, &decimal, &sign ); 
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小数点的位置,sign表示符号:0为正数,1为负数 
(4)CString变量转string
str = "2008北京奥运";
非Unicode
①buf = (LPSTR)(LPCTSTR)str; 
②string buf(str.Getbuffer()); 
str.ReleaseBuffer();
Unicode
先转成char*,再直接赋值

temp="123456";
(5)短整型(int)
i = atoi(temp); 
(6)长整型(long)
l = atol(temp); 
(7)浮点(double)
d = atof(temp); 
string s; d= atof(s.c_str()); 

(8)string转char*

string 是c++标准库里面其中一个,封装了对字符串的操作 

把string转换为char* 有3中方法: 
1。data 
如: 
stringstr="abc"; 
char *p=str.data(); 
2.c_str 
如:string str="gdfd"; 
char *p=str.c_str(); 
3 copy 
比如 
string str="hello"; 
char p[40]; 
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout < <p;

(9)string转wchar_t

#include <stdlib.h>

string str = "hello";
wchar_t* wsz;
wsz = new wchar_t[str.size()];
mbstowcs(wsz, str.c_str(),str.size());


三,Cstring、string、float、int、double之间的转换

unicode下数据类型转换:


CString转string

CString b="1234" ;
USES_CONVERSION;
string a(W2A(b));


string转CString

string str="123";
CString cstr(str.c_str());//或者CString cstr(str.data());初始化时才行
cstr=str.c_str();或者cstr=str.data();


CString转int
CString b="123";
int i;
i=_ttoi(b); //在使用多字符集下 _atoi(array to integer 的缩写)函数是一个好的选择,它也很少会是一个正确的选择。而在使用 Unicode 字符,你应该用_ttoi(),它在 ANSI 编码系统中被编译成_atoi()


int型转CString型
CString a;
int b=20;
a.Format(_T("%d"),b); //_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式,TEXT,_TEXT 和_T 是一样的


CString型转double型
CString strs;
double f;
f=_ttol(strs);


CString型转float型
CString strs;
float flt;
flt = (float)atof((char *)(LPTSTR)(LPCTSTR)strs);


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值