python整数格式转换

python integer format conversion

我需要一个可以执行以下操作的应用程序:

  1. 读取 UDP 消息,从中获取数据 - 数据是文本的,逗号分隔。
  2. 根据此值构建新消息
  3. 向其他目的地发送新的 UDP 消息。

第一次和最后一次我都很好。第二,我有一个挑战: 假设我收到的数据是 Year = 2020。 Wireshark 上的消息(第 3 步),我将其视为值 07 e4

的 2 个字节

我该怎么做?我尝试了几种方法,其中 none 为我提供了所需的格式。

代码示例:

data1 = '\xab\xcd\xef\xgh'
...
data, addr = sock.recvfrom (200)
elements = data.decode().split(",")
Date=elements[15].split("/")
Year = int(Date(2))
year = <do something with Year to convert to right format>
newMsg = data1 + year
...
newSock.sendto(newMsg.encode('charmap'), (IP, int(port)))

Python 版本 3.5

这里似乎有几个问题。首先,如果你的 data1 真的应该是原始字节那么你最好通过在它前面加上 b 来声明它,比如:

data1 = b'\xab\xcd\xef\xff'

如果它来自其他地方,则将其适当地编码为 bytes

为了回答您的主要问题,struct 模块提供了有用的工具,可以按照您想要的方式将数字编码为字节。 ctypes 也很有用,但是 struct 往往更容易用于这些事情:

data, addr = sock.recvfrom (200)
elements = data.decode().split(",")
date = elements[15].split("/")
year = int(date(2))
newMsg = data1 + struct.pack('!h', year)

然后您可以发送:

newSock.sendto(newMsg, (IP, int(port)))