【发布时间】:2023-03-27 18:45:01
【问题描述】:
上下文: 我正在尝试一个捕获一些 MQTT 消息然后记录它们的程序。这样做时,我遇到了一个奇怪的问题,我需要帮助。
在传入的消息中,我得到一个 base64 编码的字符串。我的程序尝试解码和解析二进制数据以找出数据包的一些标头。我的代码如下所示:
result = base64.standard_b64decode("AO/Nq4lnRSMBZXMnLHcKXhSObYxiFvY=")
结果的输出如下所示:
b"\x00\xef\xcd\xab\x89gE#\x01es',w\n^\x14\x8em\x8cb\x16\xf6"
如果使用 nodeJS 实现同样的操作,输出是完全不同的:
<Buffer 00 ef cd ab 89 67 45 23 01 65 73 27 2c 77 0a 5e 14 8e 6d 8c 62 16 f6>
我在堆栈溢出中阅读了其他一些链接,但不明白为什么存在差异。链接NodeJS base64 Vs Python base64 有一些关于已完成编码的有效点,因此 Python 在这里所做的并没有错。
进一步阅读后,我发现了另一个使用 binascii 函数的技巧。所以,如果我应用这个逻辑,我的输出看起来和 NodeJS 的输出完全一样!
import binascii
binascii.hexlify(result)
b'00efcdab89674523016573272c770a5e148e6d8c6216f6'
现在我的输出看起来像我想要的。然而,还有另一个新问题。 base64 解码的输出格式为 b'\x00',而 hexlify 的输出格式为 b'0'。由于这种差异,我无法运行代码的另一部分,该代码将这个输出逐字节拆分以根据数据包的标头以不同的格式执行 struct.unpack。
有什么帮助我可以继续吗?
【问题讨论】:
-
你能不能试试 binascii.b2a_base64(data),如果你想要相反的docs.python.org/2/library/binascii.html,他们也有 binascii.a2b_base64(string)
标签: python node.js python-3.x base64