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;//其中存在' '元素 } // 转化 QByteArray array; array = QByteArray(buf, 10);//因为buf[]中有` `,必须要写上数据长度;否则,数据会直接截断,丢失数据
方法2 memcpy函数(灵活)
char buf[10]; //给buf赋值 for (int i = 0; i < 10; i++){ buf[i] = (i + 1) % 3;//其中存在' '元素 } // 转化 QByteArray array; array.resize(sizeof(buf));//重置数据大小 memcpy(array.data(), buf, sizeof(buf));//copy数据