QT常用数据格式转换

1、QString

1.1 QString转char*

先将QString转为QByteArray,再将QByterray转为char*

QString str;
char * ch;
QByteArray byte = str.toLatin1();    //将QString转为QByteArray
ch = byte.data();

1.2 QString转hex

QString str = "0x1a";
qint16 hex_value = str.toInt(nullptr, 16);

1.3 数字转QString

//方法1
QString str = QString::number(54.2, 10);  //54.2十进制
//方法2
QString str;
str.setNum(54.23);
//方法3
qint32 addr = 0x0800d000;
QString b=QString("%1").arg(addr, 8, 16, QChar('0'));     //保留八位,16进制显示

 2、QByteArray

https://www.freesion.com/article/5107168141/

2.1 QByteArray转char*

方法1 data()和size()函数:

QByteArray array(10, 'Q');//初始化
//array 赋值等代码
char *buf;//只是一个指针
int len;//buf的长度
buf = array.data();
len = array.size();

 方法2 memcpy函数(灵活):

QByteArray array(9,'Q');
char buf[10];//数组
int len_array = array.size();
int len_buf = sizeof(buf);
int len = qMin( len_array, len_buf );
// 转化
memcpy( buf, array,  len );

2.2 char*转QByteArray

方法1 利用构造函数

char buf[10];
//给buf赋值
for (int i = 0; i < 10; i++){
    buf[i] = (i + 1) % 3;//其中存在'\0'元素
}
// 转化
QByteArray array;
array = QByteArray(buf, 10);//因为buf[]中有`\0`,必须要写上数据长度;否则,数据会直接截断,丢失数据

 方法2 memcpy函数(灵活)

char buf[10];
//给buf赋值
for (int i = 0; i < 10; i++){
    buf[i] = (i + 1) % 3;//其中存在'\0'元素
}
// 转化
QByteArray array;
array.resize(sizeof(buf));//重置数据大小
memcpy(array.data(), buf, sizeof(buf));//copy数据
posted @ 2021-04-14 20:15  Mike_2019  阅读(525)  评论(0编辑  收藏  举报