C++各种类型转换,期待你的加入,共同完善

1.intchar*之间的转换:

intatoi(const char * str);

示例

char* ch = "152";

int num = atoi(ch);

输出:num = 152;

char* itoa(int Val, char * DstBuf, int Radix);

示例

int number = 123456789;

char string[25];

char* ch;

ch = itoa(number, string,10);

输出:ch =“123456” string=“123456”

2.long char* 转换

char* ltoa(long _Val, char * _DstBuf, int _Radix);

long atol(const char* Str);

3.doublechar*转换

double atof(const char* String);

此处没有对应的ftoa,故而使用sprintf实现。

char ch[50];

double dbl = 12345.123;

sprintf(ch,"%f",dbl);

输出:ch = 12345.1230000

4.char*wchar_t*之间的转换

size_t mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);

char*ch;

ch = "i am student";

wchar_t wch[50];

int size = mbstowcs(wch,ch,13);

输出:size = 12wch = "i am student";

wchar_t* wch=L"i am student";

char ch[50];

int size = wcstombs(ch,wch,13);

输出:size = 12ch = "i am student";

5.const char* 转换成 char*。该转变在stringchar*之间转变时常用,string.c_str()得到的为const char*

const_cast<char*>( const char*)

6.中文字符问题,fstream打开文件时,在vs2008vs2003之上文件路径存在中文字符时,文件无法打开。解决办法:

locale::global(locale(“”));//文件打开前

fstream.open(…);

locale::global(locale(“C”));//文件打开后,如果不使用该语句还原默认设置,后续的cout会出现乱码。

7.字符集之间转换:LPSTR LPWSTR

LPWSTR 转变成 LPSTR

LPTSTR pp =L"i am a strudent";

LPSTR p = new CHAR[100];

WideCharToMultiByte(CP_ACP, 0, pp, -1, p, 100, NULL, NULL);

输出:p = "i am a strudent";

LPSTR转变成LPWSTR

LPWSTR pp = new TCHAR[100];

LPSTR p = "i am a strudent";

MultiByteToWideChar(CP_ACP, 0, p, -1, pp, 100);

输出:pp = "i am a strudent";

备注:WideCharToMultiByteMultiByteToWideChar中第6个参数设置为零时,则不进行转换,而直接返回出对应转换所需要的存储区大小。故而实际使用中常如下:

LPSTR p = "i am a strudent";

int mm = MultiByteToWideChar(CP_ACP, 0, p, -1, NULL, 0);

LPWSTR pp = new TCHAR[mm];

MultiByteToWideChar(CP_ACP, 0, p, -1, pp, mm);

delete[] pp;

8.获取当前时间,并转换为字符串:

time_t ltime;

ltime = time(0);

char tmp[64];

ZeroMemory(tmp, 0);

strftime( tmp, sizeof(tmp), "%Y/%m/%d %X",localtime(&ltime))

输出:tmp = "2011/11/18 10:14:07";

9.CStringLPSTRLPWSTR之间的转换,此处不作讲解。CString的使用,根据项目设置不同,自动调整为CStringWCStringA分别对应LPWSTRLPSTR,在对应状况下都可直接转。所以其实遇到的根本问题还是LPSTRLPWSTR之间的转换。网上很多关于CString转换的帖子,可直接参考。如果发现网上那些CString转换的方法到你这里不行,不用去抱怨他们乱讲,而是他们项目设置和你不一样。具体做法参见:7

10. 补充:static_cast<>()const_cast<>() reinterpret_cast<> dynamic_cast<>()。这四种具体用法可google,很多时候他们的作用也很潇洒。

C++的类型转换是严重让人能抓狂的问题,很多时候不得不花费时间去解决这些细节。本文中列举的情形毕竟有限,尚未涉及万能类型之类的。希望阅读此文的你,进行补充,希望以后这篇文章以及这篇文章的评论可以解决大部分类型转换问题,权当工具书使用吧。

标签 , , ,

发表回复