int转4字节数组
QByteArray SCL::intTo4ByteArray(int i)
{
QByteArray ba;
ba.resize(4);
ba[0] = (uchar)(0x000000ff & i);
ba[1] = (uchar)((0x0000ff00&i)>>8);
ba[2] = (uchar)((0x00ff0000&i)>>16);
ba[3] = (uchar)((0xff000000&i)>>24);
return ba;
}
int转2字节数组
QByteArray SCL::intTo2ByteArray(int i)
{
QByteArray ba;
ba.resize(2);
ba[0] = (uchar)(0x000000ff & i);
ba[1] = (uchar)((0x0000ff00&i)>>8);
return ba;
}
int转单字节
QByteArray SCL::intToByteArray(int i)
{
QByteArray ba;
ba.resize(1);
ba[0] = (uchar)(0x000000ff & i);
return ba;
}
字节数组转int
int SCL::ByteArray4ToInt(const QByteArray &bytes)
{
int i = bytes[0] & 0x000000FF;
i |= ((bytes[1] <<8)&0x0000FF00);
i |= ((bytes[2] <<16)&0x00FF0000);
i |= ((bytes[3] <<24)&0xFF000000);
return i;
}
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 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数据
3.1. int 与 QByteArray 互转
[1] int 转 QByteArray
-
// int 转 QByteArray
-
int intVar = 199;
-
QByteArray array;
-
int len_intVar = sizeof(intVar);
-
array.resize(len_intVar);
-
memcpy(array.data(), &intVar, len_intVar);
[2]QByteArray 转 int[]
-
// QByteArray 转 int[]
-
// array 数据接上面
-
int outIntVar[4];
-
memcpy(&outIntVar, array.data(), len_intVar);
-
//memcpy(&outIntVar, array, len_intVar);//此行代码与上句通用
4.1. float[] 与 QByteArray 互转
[1] float[] 转 QByteArray
-
// float[] 转 QByteArray
-
float fVar[4] = { 1.1, 2.3, 9.5, 0.2 };//初始化变量赋值
-
QByteArray array;
-
int len_fVar = sizeof(fVar); // 4*4 = 16 (一个float占4个字节)
-
array.resize(len_intVar);
-
memcpy(array.data(), &fVar, len_fVar);
[2]QByteArray 转 float[]
-
// QByteArray 转 float[]
-
float outFvar[4];
-
memcpy(&outIntVar, array.data(), len_fVar);
-
//memcpy(&outFvar, array, len_fVar);//此行代码与上句通用