-2

根据我的标准,我需要将数据存储在长 HEX 行中。

当字节的某些位需要为某个值时,问题就出现了

例子

      Field Name | Size
          A      |  2-Bytes
          B      |  4-Bytes
          C      |  1-Bytes

& 进一步在 2 个字节的字段 A 中,第一个 2 位必须代表“类型”(01 或 10)&接下来的 14 位必须代表一个整数(类型的位置)

      #--------#-----------------------#
      |  TYPE  |       Location        |
      #--------#-----------------------#
        2-bits          14-bits
      ***********************************> Total 2 bytes

其他领域的类似过程

如何使用代表类型的所需起始位以固定字段大小存储数据

如果可能的话,请给我一个简单的例子,比如说:

        Type = 01
      & Location = 412

以 2 字节大小的十六进制格式存储

这是在使用 Qt 的 C++ 项目中,因此您可以使用 Qt API。

4

1 回答 1

1

您的问题的答案与 Qt、c++ 或任何其他语言无关。所有语言都会以几乎相同的方式处理这个问题。

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

您的具体示例显示您的变量是 2 个字节(16 位),因此您很可能使用unsigned short int. 在 Qt 中,这已被typedef编辑为quint16

要获取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;
于 2013-09-10T09:30:01.430 回答