前言
在项目中,经常用到一些基本数据类型之间的转换,而记性越发不好的今天,只能每次都去请教度娘,这就很不好。故在此做一些总结,方便查阅。
介绍
在写此文章时,查了一些资料,然后发现数据类型之间的转换,也包含有一些之前没注意过的细节,感觉颇有收获。
int 转char*
此类型之间的转换,主要用到了两个方法 itoa 和 sprintf 。itoa并不是一个标准的c函数,它是windows特有的(在Linux下的 stdlib.h 库,其中没有 itoa 函数),故建议用sprintf ,在Qt跨平台时,就不需修改。下面对这两个方法进行详细的介绍。
itoa(int value,char* buffer,radix),此函数有三个参数,value需转换整型,buffer目标字符串,radix数字转换的基数。
char sz_id[256];
int id=obj.value("id").toInt();
itoa(id,sz_id,10);
int id=17;
char sz_id[256];
sprintf(sz_id,"%d",id);
QString 转char*
此类型在转换时,要格外注意中文的转换,必须将其转化为utf8编码,不然则会乱码。如下:
QString str=QString::fromLocal8Bit("你好");
QByteArray byte=str.toUtf8();
char* data=byte.data();
char* 转QString
直接转换即可。
char* data="hello";
QString str(data);
QString转字符数组char[]
此类型转换要使用
char *strcpy(char* dest, const char *src)
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char data[10];
QString str("hello");
strcpy(data,str.toLocal8Bit().data());
结束语
很多时候,我们总是关注整体,而不在乎细节,但是要记住,大船总是在阴沟里翻船,我们不要在洗脸盆里淹死。。。