对不起,愚蠢的问题,但是,Python的struct.pack究竟做了什么?
我阅读文档,而且还可以了解什么是这个功能做:
struct.pack('<L',0x01D1F23A)
有人能解释十分幼稚和详细的方式是什么这一功能将为做给定输入和其他输入。
当我打印输出我得到“:≥╤☺”,十六进制值的ASCII表示,struct.pack的所以基本上如何悬挂,它则转为小端旁边的十六进制值。 它如何存储在内存中? 我不明白它是什么“包装”。
谢谢。
对不起,愚蠢的问题,但是,Python的struct.pack究竟做了什么?
我阅读文档,而且还可以了解什么是这个功能做:
struct.pack('<L',0x01D1F23A)
有人能解释十分幼稚和详细的方式是什么这一功能将为做给定输入和其他输入。
当我打印输出我得到“:≥╤☺”,十六进制值的ASCII表示,struct.pack的所以基本上如何悬挂,它则转为小端旁边的十六进制值。 它如何存储在内存中? 我不明白它是什么“包装”。
谢谢。
返回值是Python 2中的一个字节串(在Python 3中),或者是Python 2中的标准(非Unicode)字符串,显示0x01D1F23A以little-endian字节顺序表示为unsigned long。
它的“包装”因为它存储为原始的二进制内容 - 你必须与本地存储在内存上的小端平台上的固有无符号长型完全相同的内容。
The byte order is specified by the <
和the unsigned-long type is specified by the L
。
,如果你试图写一个文件,网络数据包,或在本地二进制格式等内容,这非常有用。
这需要数据的几件(在你的情况下,连成一片,L - 4字节整数),并将它们放入一个字节串
>>> struct.pack('<L', 0x01D1F23A) == b'\x3A\xF2\xD1\x01'
True
你的困惑可能来自多个来源
嗯?它只是“十六进制”,而它是配置文件中的文本;一旦它被解析,它就是一个传递给'pack()'调用的本地二进制数。 –
这不是ASCII;我不确定什么编码会映射,例如,“F2”为≥。 – chepner