用二进制文件写文件&带位操作的十六进制

时间:2013-09-10 08:07:13

标签: c++ qt binary hex

根据我的标准,我需要将数据存储在一个长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。

1 个答案:

答案 0 :(得分:1)

您的问题的答案与Qt,c ++或任何其他语言无关。所有语言都会以完全相同的方式处理它。

如果您关心变量中的特定位,则需要使用按位运算符。

您的具体示例显示您的变量是2个字节(16位),因此您最有可能使用unsigned short int。在Qt中,typedefquint16

要获取TypeLocation数据的位,您可以像这样应用按位运算符:

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;