Python3:如何将附加到字节数组中的数字作为字节追加

2024-09-29 19:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python脚本中,我想要做的是有一个bytearray并在其上附加两个数字,作为消息发送,然后让接收的C应用程序再次读取这个数字。

C应用程序如下所示:

//deserialize srvid from end of payload
UInt16 srvIdFrom;
UInt16 srvIdTo;

srvIdFrom = payload[len-4]  | payload[len-3] << 8;
srvIdTo = payload[len-2]  | payload[len-1] << 8;

我制作了一个Python脚本,它试图这样做:

^{pr2}$

但它不起作用。 一、 e.以下代码给出以下输出:

srvIdFrom = my_bytes[len(my_bytes)-4] << 8 | my_bytes[len(my_bytes)-3] << 0
srvIdTo = my_bytes[len(my_bytes)-2] << 8 | my_bytes[len(my_bytes)-1] << 0
print('return packet had srvIdFrom {} and srvIdTo {}'.format(srvIdFrom,srvIdTo))

输出

return packet had srvIdFrom 53764 and srvIdTo 44

或者类似的东西。我做错什么了?


Tags: and脚本应用程序lenreturnbytespacketmy
1条回答
网友
1楼 · 发布于 2024-09-29 19:28:51

按以下顺序追加字节

my_bytes.append(dummySrvId & 0xff)  # -4 (offset from end)
my_bytes.append(dummySrvId >> 8)    # -3
my_bytes.append(srvIdFrom & 0xff)   # -2
my_bytes.append(srvIdFrom >> 8)     # -1

但是在要解码的Python测试中,您会将错误的字节移位,从而有效地交换了MSB和LSB部分:

^{pr2}$

后者也不匹配您的C代码;您可以移动小端字节(偏移量-3和-1):

srvIdFrom = payload[len-4]  | payload[len-3] << 8;
srvIdTo = payload[len-2]  | payload[len-1] << 8;

实际上,如果交换移位并匹配C代码进行解码,则会得到正确的值:

>>> my_bytes[len(my_bytes)-4] | my_bytes[len(my_bytes)-3] << 8
1234
>>> my_bytes[len(my_bytes)-2] | my_bytes[len(my_bytes)-1] << 8
5678

所以其他的事情出了问题。您的Python编码工作很好。在

相关问题 更多 >

    热门问题