什么是从struct.pack输出的字母的含义?(What is the meaning of th

2019-07-31 08:12发布

当我改变号为十六进制数在蟒结构模块,

>>> 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”的输出意思?

Answer 1:

你不会转换为十六进制。 您正在收拾整数作为二进制数据......在这种情况下,小尾数二进制数据。 第一字符是只是相应的ASCII字符的原始字节; 例如89Y122z ,和98b

  • 第一pack生成'\x59\x00\x00\x00'0x00000059 ; '\x59''Y'
  • 第二产生'\x7a\x03\x00\x00'0x0000037a ; '\x7a''z'
  • 第三产生'\x62\x07\x00\x00'0x00000762 ; '\x62''b'

请参见下面的ASCII表。

http://www.asciitable.com/index/asciifull.gif



Answer 2:

请注意,您并未转换为十六进制,你将数据转换成原始字节。 然后,控制台呼应这些字节回你,可以再次输入为蟒蛇文字字符串的形式。

所以蟒是印刷文字的字节串 ,和一些字节可以被表示为ASCII字符; 在范围最0x21-0x7E字节可以被打印为这样:

>>> '\x22'
'"'
>>> '\x50'
'P'

因此,“Y”,“Z”,和“b”是落入在该范围内和python只是打印它们作为ASCII而不是字节\x逸出:

>>> '\x59'
'Y'
>>> '\x62'
'b'
>>> '\x7a'
'z'

你的字节的其余部分属于可打印的ASCII范围之外,所以Python是代表这些为\xFF文字,这恰好使用16进制。



Answer 3:

客户可以通过线走线
但首先我们要了解小端格式和字符值:
32位小端 INT的右侧有最显著位
所以在存储器的十六进制的值(0×01,0×02,×03,×04)是真的(0×04,×03,0×02 0×01)
char值 'Y'= 0×59 = 89, 'Z'= 0x7a = 122, 'B'= 0X62 = 98

'Y \ X00 \ X00 \ X00'= 0×59,0x00时,0×00,0×00 /数据在存储器
'Y \ X00 \ X00 \ X00'= 0x00000059 = 89 /实整数值

'Z \ X03 \ X00 \ X00'= 0x7a,0x03时,0×00,0×00 /数据在存储器
'Z \ X03 \ X00 \ X00'= 0x0000037a = 890 /实整数值

'B \ X0B \ X07 \ X00'= 0X62,0×07,0x00时,0×00 /数据在存储器
'B \ X0B \ X07 \ X00'= 0x00000762 = 1890 /实整数值



文章来源: What is the meaning of the letters in the output from struct.pack?
标签: python pack