如何解决如何在 PyZMQ 中解码 JeroMQ 字节数组?
我正在尝试将 JeroMQ 发布者连接到 PyZMQ 订阅者。它运行良好,但我不知道如何解码/反序列化我在 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,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 之间的差异,但我猜你最后错了一些东西,或者使用了来自两次不同运行的数据)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。