Python struct.pack输出中的字母是什么意思?
当我在python的结构模块中将数字改为十六进制时Python struct.pack输出中的字母是什么意思?,python,pack,Python,Pack,当我在python的结构模块中将数字改为十六进制时 >>> import struct >>> struct.pack("i",89) 'Y\x00\x00\x00' >>> struct.pack("i",890) 'z\x03\x00\x00' >>> struct.pack("i",1890) 'b\x07\x00\x00' 输出中“Y,z,b”的含义是什么?请注意,您不是在转换为十六进制,而是在将数据转换为原始字节
>>> import struct
>>> struct.pack("i",89)
'Y\x00\x00\x00'
>>> struct.pack("i",890)
'z\x03\x00\x00'
>>> struct.pack("i",1890)
'b\x07\x00\x00'
输出中“Y,z,b”的含义是什么?请注意,您不是在转换为十六进制,而是在将数据转换为原始字节。然后,控制台将这些字节以可以作为python文本字符串再次输入的形式返回给您 因此python正在打印文本字节字符串,其中一些字节可以表示为ASCII字符;0x21-0x7E范围内的大多数字节可以按如下方式打印:
>>> '\x22'
'"'
>>> '\x50'
'P'
因此,“Y”、“z”和“b”是属于该范围的字节,python只是将它们打印为ASCII而不是转义:
>>> '\x59'
'Y'
>>> '\x62'
'b'
>>> '\x7a'
'z'
其余的字节不在可打印的ASCII范围内,因此python将这些字节表示为
\xFF
文本,它恰好使用十六进制表示法。您没有转换为十六进制。您正在将整数打包为二进制数据。。。在本例中,使用小的endian二进制数据。第一个字符只是原始字节对应的ASCII字符;e、 g.89
是Y
,122
是z
,98
是b
- 第一个
为pack
生成0x00000059
<代码>'\x59'是'\x59\x00\x00\x00'
'Y'
- 第二个为
生成0x0000037a
<代码>'\x7a'是'\x7a\x03\x00\x00'
'z'
- 第三个为
生成0x00000762
<代码>'\x62'是'\x62\x07\x00\x00'
'b'
(来源:)让我们一行一行地走吧
但首先我们必须了解little endian格式和字符值:
32位小尾数int在右边有最高有效位
所以内存中十六进制(0x01,0x02,0x03,0x04)的值实际上是(0x04,0x03,0x02,0x01)
字符值Y'=0x59=89,'z'=0x7a=122,'b'=0x62=98 “Y\x00\x00\x00'=0x59,0x00,0x00,0x00/内存中的数据
'Y\x00\x00\x00'=0x00000059=89/实整数值
'z\x03\x00\x00'=0x7a、0x03、0x00、0x00/内存中的数据
'z\x03\x00\x00'=0x0000037a=890/实整数值
“b\x0b\x07\x00”=0x62、0x07、0x00、0x00/内存中的数据
'b\x0b\x07\x00'=0x00000762=1890/实整数值