对Python字节类型感到困惑
我正在阅读一个二进制文件(Python3),并试图在struct模块的帮助下转换块对Python字节类型感到困惑,python,struct,Python,Struct,我正在阅读一个二进制文件(Python3),并试图在struct模块的帮助下转换块 f = open(fn, "rb") try: a=f.read(2) ... 当我使用: unpack("h",b'\x6b\x0a') 它给了我期望的结果 (2667,) 但我不能用这种语法来解释 b'6b0a' 尽管: print(type(b'6b0a')) print(type(b'\x6b\x0a')) 提供相同的类型: <class 'bytes'> <clas
f = open(fn, "rb")
try:
a=f.read(2)
...
当我使用:
unpack("h",b'\x6b\x0a')
它给了我期望的结果
(2667,)
但我不能用这种语法来解释
b'6b0a'
尽管:
print(type(b'6b0a'))
print(type(b'\x6b\x0a'))
提供相同的类型:
<class 'bytes'>
<class 'bytes'>
我搞混了什么?我想这在Python2.x中曾经适用。
b'\x6b\x0a'
是两个字节:0x6b 0x0a<代码>b'6b0a'是四个字节:0x36 0x62 0x30 0x61
>>> binascii.unhexlify(b'6b0a')
b'k\n'
b'\x6b\x0a'
是两个字节:0x6b 0x0a<代码>b'6b0a'是四个字节:0x36 0x62 0x30 0x61
>>> binascii.unhexlify(b'6b0a')
b'k\n'
在ab''
中是单个字节的十六进制表示的标准(也允许以字节文字表示),而
在该字节文本中有两个ASCII字符,表示两个字节
发件人:
字节文字中只允许使用ASCII字符(无论声明的源代码编码如何)。任何二进制
超过127的值必须使用适当的转义序列输入字节文本
虽然字节文字和表示基于ASCII文本,但字节对象的行为实际上类似于不可变序列
整数,序列中的每个值都受到限制,因此0
在ab''
中是单个字节的十六进制表示的标准(也允许以字节文字表示),而
在该字节文本中有两个ASCII字符,表示两个字节
发件人:
字节文字中只允许使用ASCII字符(无论声明的源代码编码如何)。任何二进制
超过127的值必须使用适当的转义序列输入字节文本
虽然字节文字和表示基于ASCII文本,但字节对象的行为实际上类似于不可变序列
整数,序列中的每个值都受到限制,因此0内部可以使用两种方法指定单个字节:
\
开头),例如b'\n\123\x56\\\'
b'\x6b\x0a'
和b'6b0a'
a都是有效的字节文本-但不幸的是不同:
- 第一个由
字节组成(表示为转义序列2
和\x6b
)\x0a
- 第二个由
字节组成(表示为ASCII字符4
、6
、b
和0
)a
\
开头),例如b'\n\123\x56\\\'
b'\x6b\x0a'
和b'6b0a'
a都是有效的字节文本-但不幸的是不同:
- 第一个由
字节组成(表示为转义序列2
和\x6b
)\x0a
- 第二个由
字节组成(表示为ASCII字符4
、6
、b
和0
)a
6b