【问题标题】:Writing File in binary & Hex with bit manipulation使用位操作以二进制和十六进制写入文件
【发布时间】:2013-09-10 08:07:13
【问题描述】:

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

【问题讨论】:

  • 大端还是小端?
  • 查找位运算符。
  • 低位 -> 字节的最低有效位... little endian

标签: c++ qt binary hex


【解决方案1】:

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

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

您的具体示例显示您的变量为 2 个字节(16 位),因此您很可能使用 unsigned short int。在 Qt 中,这是 typedefed 为 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;

【讨论】:

  • 诚挚的问候和非常感谢
猜你喜欢
  • 2011-10-01
  • 2011-12-22
  • 2016-01-27
  • 1970-01-01
  • 2018-08-26
  • 2021-07-25
  • 2014-10-30
  • 2021-10-27
  • 2020-10-25
相关资源
最近更新 更多