【问题标题】:align bytearray to be 16 bit compatible将字节数组对齐为 16 位兼容
【发布时间】:2019-06-02 11:37:22
【问题描述】:

需要存储和检索一些可以以已知方式格式化为字符串的数据。但是数据需要 16 位对齐,因为存储设备不支持它。为了有效地存储数据,我使用 struct pack 以已知格式打包数据。但是我应该如何将数据对齐为 16 位,以便检索和存储不会搞砸数据? 例如。

data = [12,b'c', 100009, b"string", 3.45]

stringformat of data = "icl6sd"

packed data =b'\x0c\x00\x00\x00c\x00\x00\x00\xa9\x86\x01
\x00\x00\x00\x00\x00string\x00\x00\x9a\x99\x99\x99\x99\x99\x0b@'

如何将此数据转换为 16 位对齐?

【问题讨论】:

    标签: python arrays struct alignment


    【解决方案1】:

    struct.pack 知道所有关于 C 编译器字节对齐的知识,并且会在不被询问的情况下将打包字节添加到您的数据中。这就是为什么您的结构是 32 字节长的原因,即使您的数据需要 4 + 1 + 4 + 6 + 8 (=23) 字节的数据。仔细观察,您会看到(例如)string 已在右侧填充了一个额外的空字节,因此双精度将占据结构的最后 8 个字节。所以我不确定我是否确信对齐​​是错误的。

    可以自己负责填充(格式为x),但我建议struct.pack 确切地知道它在做什么。

    如果您的打包数据未按预期进行解释,则 更有可能是结构规范存在问题,或者字节顺序与预期不符。 p>

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多