【发布时间】:2019-05-31 08:26:22
【问题描述】:
我在 Python 3.7 中使用 struct pack。
我有这个包含 6 个 uint32 和一个 void * 参数的标头。
我想把它变成二进制格式。不幸的是,我正在处理的接口只支持大端。所以我实际上需要转换我发送的内容。 但是由于 P 格式不能修改它的字节顺序,所以我总是得到 struct 错误。 那么我该如何重写它以避免出现此错误。
PS:我无法删除 void * 它是我的标题的必填字段
u1 = 0x4569
u2 = 0x1236
u3 = 0x4411
u4 = 0x1236
u5 = 0x9696
point = 0 #(For now)
data = 0x26358974
buffer = struct.pack('5IPI',u1,u2,u3,u4,u5,point,data)
实际输出
buffer = b'\x69\x45\x00\x00\x36\x12\x00\x00\x11\x44\\x00\x00\x36\x12\x00\x00\x96\x96\\x00\x00\x00\x00\x00\x00\x74\x89\x35\26'
而我想要的是:
buffer = b'\x00\x00\45\x69\x00\x00\x12\36\x00\x00\x44\x11\x00\x00\x12\x36\\x00\x00\x96\x96\x00\x00\x00\x00\x26\x35\x89\x74'
【问题讨论】:
-
请用示例输入和所需输出更新问题。
-
文档说
P仅适用于本机字节排序。 -
u1 = 0x4569 u2 = 0x1236 u3 = 0x4411 u4 = 0x1236 u5 = 0x9696 point = 0 (For now) data = 0x26358974在当前状态下:buffer = struct.pack('5IPI',u1,u2,u3,u4,u5,point,data)给我:buffer = b'\x69\x45\x00\x00\x36\x12\x00\x00\x11\x44\\x00\x00\x36\x12\x00\x00\x96\x96\\x00\x00\x00\x00\x00\x00\x74\x89\x35\26'而我想要的是:buffer = b'\x00\x00\45\x69\x00\x00\x12\36\x00\x00\x44\x11\x00\x00\x12\x36\\x00\x00\x96\x96\x00\x00\x00\x00\x26\x35\x89\x74'
标签: python python-3.x struct endianness pack