C++各种类型转换

本文详细解析了C++中常见的类型转换方法,包括整型与指针、字符串与宽字符串、时间日期转换等核心内容。通过实例演示和代码注释,帮助开发者理解和掌握不同类型间的高效转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.
int与char*之间的转换:
int atoi(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. double与char*转换
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 = 12;wch = "i am student";

wchar_t* wch=L"i am student";

char ch[50];

int size = wcstombs(ch,wch,13);
输出:size = 12;ch = "i am student";
5.
const char* 转换成 char*。该转变在string和char*之间转变时常用,string.c_str()得到的为const char*
const_cast<char*>( const char*)
6.
中文字符问题,fstream打开文件时,在vs2008、vs2003之上文件路径存在中文字符时,文件无法打开。解决办法:
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";
备注:WideCharToMultiByte与MultiByteToWideChar中第6个参数设置为零时,则不进行转换,而直接返回出对应转换所需要的存储区大小。故而实际使用中常如下:
LPSTR p = "i am a strudent";
int mm = MultiByteToWideChar(CP_ACP, 0, p, -1, NULL, 0);
LPWSTR pp = new TCHAR;
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. CString与LPSTR、LPWSTR之间的转换,此处不作讲解。CString的使用,根据项目设置不同,自动调整为CStringW,CStringA分别对应LPWSTR、LPSTR,在对应状况下都可直接转。所以其实遇到的根本问题还是LPSTR与LPWSTR之间的转换。网上很多关于CString转换的帖子,可直接参考。如果发现网上那些CString转换的方法到你这里不行,不用去抱怨他们乱讲,而是他们项目设置和你不一样。具体做法参见:7。
10. 补充:static_cast<>()
const_cast<>() reinterpret_cast<> dynamic_cast<>()。这四种具体用法可google,很多时候他们的作用也很潇洒。

C++的类型转换是严重让人能抓狂的问题,很多时候不得不花费时间去解决这些细节。本文中列举的情形毕竟有限,尚未涉及万能类型之类的。希望阅读此文的你,进行补充,希望以后这篇文章以及这篇文章的评论可以解决大部分类型转换问题,权当工具书使用吧。
撰写本文的潜在目的,是想写一个class,其中包括各种常用类型转换,以解决大家在编码时花费不必要的精力解决这些很必要的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值