繁体   English   中英

在结构包Python中使用big endian和指针

[英]Using big endian in struct pack Python with a Pointer

我在Python 3.7中使用struct pack。
我有这个标题包含6个uint32和一个void *参数。

我想把它放在二进制格式。 不幸的是,我正在使用的界面只支持big endian。所以我实际上需要转换我发送的内容。 但由于P格式不能修改其endianess我总是得到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'

您可能需要分两个阶段执行此操作:

u1=1
u2=2
u3=3
u4=4
u5=5
point=6
data=7

# construct two separate buffers
b1 = struct.pack('>5I', u1, u2, u3, u4, u5)
b2 = struct.pack('P', point)

然后将指针转换回常规uint,然后返回指针:

p2 = struct.unpack('I', b2)
b2a = struct.pack('>I', p2[0])
b1 = b1 + b2a
print(b1)

输出:

b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM