你能帮我理解python中的压缩二进制数据吗

你能帮我理解python中的压缩二进制数据吗,python,Python,我按照一个示例将24位音频转换为字节 例如: struct.pack('<i', 4000000) 你能帮我理解压缩的二进制数据吗 \x00\t=\x00 我们如何解释它 非常感谢 我们可以使用以下方法获得4000000的字节表示: In [14]: x = 4000000

我按照一个示例将24位音频转换为字节

例如:

struct.pack('<i', 4000000)
你能帮我理解压缩的二进制数据吗

\x00\t=\x00

我们如何解释它


非常感谢

我们可以使用以下方法获得4000000的字节表示:

In [14]: x = 4000000                                                                                                                                                                

In [15]: print("%08X" % x)                                                                                                                                                          
003D0900
但在x86和x64机器上,整数首先存储在LSB中,因此内存中的字节将是

00 09 3D 00
这些转换为以下字符:

In [46]: print(b"%c%c%c%c" % (0x00, 0x09, 0x3D, 0x00))
b'\x00\t=\x00'
所以
0x09
\t
0x3D
=

我们可以使用
ord
、一些位移位和加法重新创建原始值:

In [52]: (ord('=') << 16) + (ord('\t') << 8)
Out[52]: 4000000
可能是我在重新组装时遗漏了
0x00
字节,把您弄糊涂了:

In [11]: (0 << 24) + (ord('=') << 16) + (ord('\t') << 8) + 0                                                                                                                        
Out[11]: 4000000

[11]中的
:(0那么我可以问一下为什么不仅仅是\t=而是\x00\t=\x00?或者为什么不是\x00\t\x00=\x00?非常好的答案。非常干净,帮助我理解。非常感谢你
In [8]: struct.unpack('<i', b'\t=')
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-8-c3b2a260fbdf> in <module>
----> 1 struct.unpack('<i', b'\t=')

error: unpack requires a buffer of 4 bytes
In [10]: struct.unpack('<i', b'\x00\t\x00=\x00')
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-10-8f3448548a2a> in <module>
----> 1 struct.unpack('<i', b'\x00\t\x00=\x00')

error: unpack requires a buffer of 4 bytes
In [11]: (0 << 24) + (ord('=') << 16) + (ord('\t') << 8) + 0                                                                                                                        
Out[11]: 4000000