1、下面分别是数据按32位、16位、8位存储和数据按32位、16位、8位解析。
1.1 数据按32位存储
/*********函数说明-数据按32位存储******************/
/*********data-数据值***************/
/*********startBit-起始位***********/
/*********bitLen-位长***************/
/*********type-类型*****************/
QString dataToBit32(int data, int startBit, int bitLen, QString type)
{
QString strData;
int index = 0, length = 0; QBitArray temp_bit(32);
index = length;
for (int m = 0; m < startBit - index; m++)
{
temp_bit.setBit(length, 0); length++;
}
if (type == "bool" || type == "uchar" || type == "schar")
{
temp_bit.setBit(length, data); length++;
}
else if (type == "enum")
{
QBitArray tmpBit(8);
// 将 char 按位存储到 QBitArray 中
for (int i = 0; i < 8; ++i)
{
// 使用位操作提取第 i 位
tmpBit.setBit(i, (data >> i) & 1);
}
for (int i = 0; i < bitLen; ++i)
{
temp_bit.setBit(length, tmpBit[i]); length++;
}
}
quint32 result = 0;
// 逐位提取并构建结果
for (int i = 0; i < 32; ++i)
{
if (temp_bit.testBit(i))
{
result |= (1u << i); // 将当前位设置为 1
}
}
strData = QString::number(result);
return strData;
}
1.2 数据按16位存储
/*********函数说明-数据按16位存储******************/
/*********data-数据值***************/
/*********startBit-起始位***********/
/*********bitLen-位长***************/
/*********type-类型*****************/
QString dataToBit16(int data, int startBit, int bitLen, QString type)
{
QString strData;
int index = 0, length = 0; QBitArray temp_bit(16);
index = length;
for (int m = 0; m < startBit - index; m++)
{
temp_bit.setBit(length, 0); length++;
}
if (type == "bool" || type == "uchar" || type == "schar")
{
temp_bit.setBit(length, data); length++;
}
else if (type == "enum")
{
QBitArray tmpBit(8);
// 将 char 按位存储到 QBitArray 中
for (int i = 0; i < 8; ++i)
{
// 使用位操作提取第 i 位
tmpBit.setBit(i, (data >> i) & 1);
}
for (int i = 0; i < bitLen; ++i)
{
temp_bit.setBit(length, tmpBit[i]); length++;
}
}
quint16 result = 0;
// 逐位提取并构建结果
for (int i = 0; i < 16; ++i)
{
if (temp_bit.testBit(i))
{
result |= (1u << i); // 将当前位设置为 1
}
}
strData = QString::number(result);
return strData;
}
1.2 数据按8位存储
/*********函数说明-数据按8位存储******************/
/*********data-数据值***************/
/*********startBit-起始位***********/
/*********bitLen-位长***************/
/*********type-类型*****************/
QString dataToBit8(int data, int startBit, int bitLen, QString type)
{
QString strData;
int index = 0, length = 0; QBitArray temp_bit(8);
index = length;
for (int m = 0; m < startBit - index; m++)
{
temp_bit.setBit(length, 0); length++;
}
if (type == "bool" || type == "uchar" || type == "schar")
{
temp_bit.setBit(length, data); length++;
}
else if (type == "enum")
{
QBitArray tmpBit(8);
// 将 char 按位存储到 QBitArray 中
for (int i = 0; i < 8; ++i)
{
// 使用位操作提取第 i 位
tmpBit.setBit(i, (data >> i) & 1);
}
for (int i = 0; i < bitLen; ++i)
{
temp_bit.setBit(length, tmpBit[i]); length++;
}
}
quint8 result = 0;
// 逐位提取并构建结果
for (int i = 0; i < 8; ++i)
{
if (temp_bit.testBit(i))
{
result |= (1u << i); // 将当前位设置为 1
}
}
strData = QString::number(result);
return strData;
}
2.1 数据按32位解析
/*********函数说明-数据按32位解析*****/
/*********value-数据值**************/
/*********startBit-起始位***********/
/*********numBits-位长**************/
int parseIntFromBits(int value, int startBit, int numBits)
{
QBitArray bitArray(32); // 创建一个 32 位的 QBitArray
// 将 uint 值转换为 QBitArray
for (int i = 0; i < 32; ++i)
{
// 将当前位的值存储到 QBitArray
bitArray.setBit(i, (value >> i) & 1);
}
quint32 result = 0;
// 提取指定的位
for (int i = 0; i < numBits; ++i)
{
if (bitArray.testBit(startBit + i))
{
result |= (1u << i); // 设置结果中的相应位
}
}
return result;
}
2.2 数据按16位解析
/*********函数说明-数据按16位解析*****/
/*********value-数据值**************/
/*********startBit-起始位***********/
/*********numBits-位长**************/
int parseIntFromBits(int value, int startBit, int numBits)
{
QBitArray bitArray(16); // 创建一个 16 位的 QBitArray
// 将 uint 值转换为 QBitArray
for (int i = 0; i < 16; ++i)
{
// 将当前位的值存储到 QBitArray
bitArray.setBit(i, (value >> i) & 1);
}
16 result = 0;
// 提取指定的位
for (int i = 0; i < numBits; ++i)
{
if (bitArray.testBit(startBit + i))
{
result |= (1u << i); // 设置结果中的相应位
}
}
return result;
}
2.3 数据按8位解析
/*********函数说明-数据按8位解析*****/
/*********value-数据值**************/
/*********startBit-起始位***********/
/*********numBits-位长**************/
int parseIntFromBits(int value, int startBit, int numBits)
{
QBitArray bitArray(8); // 创建一个 8 位的 QBitArray
// 将 uint 值转换为 QBitArray
for (int i = 0; i < 8; ++i)
{
// 将当前位的值存储到 QBitArray
bitArray.setBit(i, (value >> i) & 1);
}
8 result = 0;
// 提取指定的位
for (int i = 0; i < numBits; ++i)
{
if (bitArray.testBit(startBit + i))
{
result |= (1u << i); // 设置结果中的相应位
}
}
return result;
}
版权声明:本文为博主原创文章,转载请附上博文链接