例如:有9个16进制的数(只能是0x00和0x01)0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,将这9个数用二个字节的二进制位表示则是11110010,00000001或者(01001111,10000000)。(可以是固定的字节,如下面代码中的是6字节)
具体的代码如下所示:
QByteArray Handle::getOccupyRecord()
{
QByteArray data;
QByteArray newData;
data.resize(9);
newData.resize(6); //用6个字节来表示9个16进制的数
//初始化data和newData
for(int i = 0; i < 9; i++)
{
data[i] = 0x00;
}
for(int i = 0; i < 6; i++)
{
newData[i] = 0x00;
}
data[0] = 0x00;
data[1] = 0x01;
data[2] = 0x00;
data[3] = 0x00;
data[4] = 0x01;
data[5] = 0x01;
data[6] = 0x01;
data[7] = 0x01;
data[8] = 0x01;
//初始化newData的个数
int a = 0;
//控制移位的位数(8位)
int j = 0;
for (int i = 1; i < 9 + 1; ++i)
{
//(01001111,10000000)第一个数放在二进制的最高位
//newData[a] = newData[a] << 1 | data.at(i-1);
//(11110010,00000001)第一个数放在8位的最低位
newData[a] = newData[a] | data.at(i-1)<<j;
j++;
if(i % 8 == 0) //0对8取余还是0
{
++a;
j=0;
}
}
return newData;
}