因为工作中经常遇到报文封装,文件读取等情况,频繁需要进行数据类型转换,因此做如下总结:
String 到 QString
QString userkey = QString::fromStdString(userkeylist);
Qstring去除额外的空格,让空格只剩一个
line = line.simplified();
QString 到 String
String a = b.toStdString();
string 到 double
aiWithTm.value = atof(m_value.c_str());
QString到char*(也就是char数组)
strcpy(v5info.prvkeyname,ui->lineEdit_2->text().toStdString().c_str())
QString到unsigned char *
先执行Qstring 到char*一样的步骤,然后执行unsigned char* push = (unsigned char*)m_data;直接改一下数据类型
char*或者unsigned char数组(也就是char数组)到String 这个一定要注意!不能直接声明一个string,然后用等于赋值,遇到0会截断的!!!要用string的assign方法!!
string m_frame;
m_frame.assign((char*)buf, len);
unsigned char 数组和char数组可以随意等于,因为其中的内容是一样的!!!
获取char *长度
int length = strlen(char * p)
QString 到 int
Bool ok;
Int a = QString.toInt(&ok,10);
Int到QString
QString a = QString::number(int32_t A);
int到 string
char id[32];
sprintf(id, "%d", rtu_id);
把变量打印成字符串
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
若想输出'%'本身时, 请使用'%%'处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3. 字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
sprintf转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。