今天在工作中遇到了一个比较烦的内容,就是存储一个可变长度的多字节。
本质实际就是存储一个可变长度的数组,还要保留原先的字节数目。
其实想了几种方法,但是最终确定了一种方法,就是调用QByteArray一个自己本身的方法:
QByteArray::append(const char *str, int len);
这个函数的作用就是将某一个数值,强制转化为char*的类型进行存储,并且可以设置保存的字节数。
在使用的时候,比如说保存一个整型量,并且希望保留4个字节,则可以按照下面的形式书写:
QByteArray arrTemp;
int iData = 999;
arrTemp.append((char*)&iData, 4);
至于将QByteArray再转化回来,可以参考下面的代码:
//存入QByteArray
int arrInts[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
QByteArray array;
for (int temp : arrInts)
{
array.append((char*)&temp, 4);
}
//还原
int arrTest[10];
for (int i(0); i<10; i++)
{
//方法一
memcpy(&arrTest[i], array.data() + 4 * i; 4);
//方法二
arrTest[i] = *(int*)(array.data() + 4 * i);
}
上面介绍了两种方法,本质都是内存的直接拷贝,如果后面发现了新的方法,就再更新。