如何解码 PyZMQ 中的 JeroMQ 字节数组?

How to decode JeroMQ byte array in PyZMQ?

我正在尝试将 JeroMQ 发布者连接到 PyZMQ 订阅者。它运行良好,但我不知道如何 decode/deserialize 我在 Python 端获得的数据。

例如,这是我从 Java 发送的字节数组:[10, 10, 7, 55, 79]。我的目标是在 Python 中恢复相同的整数数组。实际上,我在 Python 端的 b"\n\n\xf97O" 处得到了这个。我希望 bytes.decode("utf-8") 可能会让我得到类似 101075579 的东西,但显然 utf-8 是错误的编解码器。你知道b"\n\n\xf97O"是什么东西吗?

这是我使用的代码:

Java边

ZContext context = new ZContext();
ZMQ.Socket broadcastSocket = context.createSocket(ZMQ.PUB);
broadcastSocket.bind("tcp://*:55555");

byte[] payload = new byte[] {10, 10, 7, 55, 79};
broadcastSocket.send(payload);

Python边

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket = setsockopt_string(zmq.SUBSCRIBE, "")
socket.connect("tcp://127.0.0.1:55555")


while 1:
    message = socket.recv()
    print(message) # outputs b"\n\n\xf97O"

你知道如何解决这个问题吗?请注意,ZMQ.Socket.sendMore(String) 发送的对象确实被 Python 识别为字节串,但我不确定如何正确解析它们。

提前致谢。

它是一个 bytes 对象,也称为字节串。如果你只是把它转换成一个列表,你会得到一个整数列表,每个字节一个:

>>> list(b"\n\n\xf97O")
[10, 10, 249, 55, 79]

你也可以直接下标并迭代它,甚至不使用 list,例如message[4] 将是 79。

(我不确定 7 和 249 之间的差异,但我猜你在最后复制了一些东西,或者使用了两次不同运行的数据)。