用固定字节的数据表示随机多个十六进制的0x00,0x01

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jacken123456/article/details/88562819

例如:有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;
}

猜你喜欢

转载自blog.csdn.net/jacken123456/article/details/88562819