根据我的标准,我需要将数据存储在一个长HEX行中。
当一个字节的某些位需要是某个值时,就会出现问题
实施例
Field Name | Size
A | 2-Bytes
B | 4-Bytes
C | 1-Bytes
&安培;字段A内还有2个字节 前2位必须代表“类型”(01或10) &安培;接下来的14位必须表示整数(类型的位置)
#--------#-----------------------#
| TYPE | Location |
#--------#-----------------------#
2-bits 14-bits
***********************************> Total 2 bytes
其他字段的类似过程
如何以固定字段大小存储数据 使用表示类型的所需起始位
如果可能的话,请给我一个简单的例子 ,让我们说:
Type = 01
& Location = 412
以大小写为2字节的十六进制格式存储
这是在使用Qt的C ++项目中,因此您可以使用Qt API。
答案 0 :(得分:1)
您的问题的答案与Qt,c ++或任何其他语言无关。所有语言都会以完全相同的方式处理它。
如果您关心变量中的特定位,则需要使用按位运算符。
您的具体示例显示您的变量是2个字节(16位),因此您最有可能使用unsigned short int
。在Qt中,typedef
为quint16
要获取Type
和Location
数据的位,您可以像这样应用按位运算符:
quint16 data;
...
Type type = static_cast<Type>((data & 0xC000) >> 14); // assuming Type is an enum
int location = data & 0x3FFF;
要将这些位存储在一个整数值中,您可以执行相反的过程:
Type type;
int location;
...
quint16 data = static_cast<int>(type) & 0xFF << 14;
data += location & 0x3FFF;