何时/为什么我应该在 python 中使用 struct 库来打包和解包?

shi*_*iva 8 python struct pack python-2.7

我不明白什么时候应该在 python 的结构库中使用打包和解包函数?我也无法理解如何使用它们?读完之后,我的理解是它们用于将数据转换为二进制。但是,当我运行一些示例时:

>>> struct.pack("i",34)
'"\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

我无法理解它。我想了解它的目的,这些转换是如何发生的,'\x' 和其他符号代表什么/意味着什么以及解包如何工作。

Mik*_*ham 6

我不明白什么时候应该在 python 的结构库中使用打包和解包函数?

那么你可能没有理由使用它们。

其他人处理具有低级二进制打包的网络和文件格式,这struct可能非常有用。

但是,当我运行一些示例时:

>>> struct.pack("i",34)
'"\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

我无法理解它。

\x符号用于bytes使用十六进制表示对象的各个字节。\x00表示该字节的值为 0,\x02表示该字节的值为 2,\x10表示该字节的值为 16,等等"是字节 34,所以我们在这个字符串视图中看到 a"而不是\x22,但'\x22\x00\x00\x00''"\x00\x00\x00'是相同的字符串

http://www.swarthmore.edu/NatSci/echeeve1/Ref/BinaryMath/NumSys.html可能会帮助您了解一些背景,如果这是您需要了解数字的级别。

  • @shiva,很多协议都是原始数据而不是文本,因为发送这些东西可以更小更快。如今,文本格式比以前更常见,但对于非常高性能的东西来说肯定不常见。 (2认同)