Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:以二进制模式读取文件不会返回预期值_Python_Binary Data - Fatal编程技术网

Python:以二进制模式读取文件不会返回预期值

Python:以二进制模式读取文件不会返回预期值,python,binary-data,Python,Binary Data,测试文件内容(二进制) 测试代码 #open file 1 f1 = open(test.txt, 'rb') #declare variables address = 0 #read a byte while(address < 256): byte = f1.read(1) print(byte) address = address + 1 #打开文件1 f1=打开(test.txt,“rb”) #声明变量 地址=0 #读一个字节 而(地址

测试文件内容(二进制)

测试代码

#open file 1
f1 = open(test.txt, 'rb')

#declare variables
address = 0

#read a byte
while(address < 256):
    byte = f1.read(1)
    print(byte)
    address = address + 1
#打开文件1
f1=打开(test.txt,“rb”)
#声明变量
地址=0
#读一个字节
而(地址<256):
字节=f1。读取(1)
打印(字节)
地址=地址+1
归还什么

b'\x00'
b'\x01'
b'\x02'
b'\x03'
b'\x04'
b'\x05'
b'\x06'
b'\x07'
b'\x08'
b'\t'
b'\n'
b'\x0b'
b'\x0c'
b'\r'
b'\x0e'
b'\x0f'
b'\x10'
b'\x11'
b'\x12'
b'\x13'
b'\x14'
b'\x15'
b'\x16'
b'\x17'
b'\x18'
b'\x19'
b'\x1a'
b'\x1b'
b'\x1c'
b'\x1d'
b'\x1e'
b'\x1f'
b' '
b'!'
b'"'
b'#'
b'$'
b'%'
b'&'
b"'"
b'('
b')'
b'*'
b'+'
b','
b'-'
b'.'
b'/'
b'0'
b'1'
b'2'
b'3'
b'4'
b'5'
b'6'
b'7'
b'8'
b'9'
b':'
b';'
b'<'
b'='
b'>'
b'?'
b'@'
b'A'
b'B'
b'C'
b'D'
b'E'
b'F'
b'G'
b'H'
b'I'
b'J'
b'K'
b'L'
b'M'
b'N'
b'O'
b'P'
b'Q'
b'R'
b'S'
b'T'
b'U'
b'V'
b'W'
b'X'
b'Y'
b'Z'
b'['
b'\\'
b']'
b'^'
b'_'
b'`'
b'a'
b'b'
b'c'
b'd'
b'e'
b'f'
b'g'
b'h'
b'i'
b'j'
b'k'
b'l'
b'm'
b'n'
b'o'
b'p'
b'q'
b'r'
b's'
b't'
b'u'
b'v'
b'w'
b'x'
b'y'
b'z'
b'{'
b'|'
b'}'
b'~'
b'\x7f'
b'\x80'
b'\x81'
b'\x82'
b'\x83'
b'\x84'
b'\x85'
b'\x86'
b'\x87'
b'\x88'
b'\x89'
b'\x8a'
b'\x8b'
b'\x8c'
b'\x8d'
b'\x8e'
b'\x8f'
b'\x90'
b'\x91'
b'\x92'
b'\x93'
b'\x94'
b'\x95'
b'\x96'
b'\x97'
b'\x98'
b'\x99'
b'\x9a'
b'\x9b'
b'\x9c'
b'\x9d'
b'\x9e'
b'\x9f'
b'\xa0'
b'\xa1'
b'\xa2'
b'\xa3'
b'\xa4'
b'\xa5'
b'\xa6'
b'\xa7'
b'\xa8'
b'\xa9'
b'\xaa'
b'\xab'
b'\xac'
b'\xad'
b'\xae'
b'\xaf'
b'\xb0'
b'\xb1'
b'\xb2'
b'\xb3'
b'\xb4'
b'\xb5'
b'\xb6'
b'\xb7'
b'\xb8'
b'\xb9'
b'\xba'
b'\xbb'
b'\xbc'
b'\xbd'
b'\xbe'
b'\xbf'
b'\xc0'
b'\xc1'
b'\xc2'
b'\xc3'
b'\xc4'
b'\xc5'
b'\xc6'
b'\xc7'
b'\xc8'
b'\xc9'
b'\xca'
b'\xcb'
b'\xcc'
b'\xcd'
b'\xce'
b'\xcf'
b'\xd0'
b'\xd1'
b'\xd2'
b'\xd3'
b'\xd4'
b'\xd5'
b'\xd6'
b'\xd7'
b'\xd8'
b'\xd9'
b'\xda'
b'\xdb'
b'\xdc'
b'\xdd'
b'\xde'
b'\xdf'
b'\xe0'
b'\xe1'
b'\xe2'
b'\xe3'
b'\xe4'
b'\xe5'
b'\xe6'
b'\xe7'
b'\xe8'
b'\xe9'
b'\xea'
b'\xeb'
b'\xec'
b'\xed'
b'\xee'
b'\xef'
b'\xf0'
b'\xf1'
b'\xf2'
b'\xf3'
b'\xf4'
b'\xf5'
b'\xf6'
b'\xf7'
b'\xf8'
b'\xf9'
b'\xfa'
b'\xfb'
b'\xfc'
b'\xfd'
b'\xfe'
b'\xff'
b'\x00'
b'\x01'
b'\x02'
b'\x03'
b'\x04'
b'\x05'
b'\x06'
b'\x07'
b'\x08'
b'\t'
b'\n'
b'\x0b'
b'\x0c'
b'\r'
b'\x0e'
b'\x0f'
b'\x10'
b'\x11'
b'\x12'
b'\x13'
b'\x14'
b'\x15'
b'\x16'
b'\x17'
b'\x18'
b'\x19'
b'\x1a'
b'\x1b'
b'\x1c'
b'\x1d'
b'\x1e'
b'\x1f'
b“
b'!'
b''
b'#'
b‘$’
b“%”
b'&'
b“'”
b'('
b')'
b'*'
b'+'
b','
b'-'
b.'
b'/'
b'0'
b'1'
b'2'
b'3'
b'4'
b'5'
b'6'
b'7'
b'8'
b'9'
b':'
b';'
b“
b'?'
b'@'
b'A'
b'b'
b'C'
b'D'
b'E'
b'F'
b'G'
b'H'
b'I'
b'J'
b'K'
比尔
我是
b'N'
b'O'
b'P'
b'Q'
比尔
b的
b'T'
b'U'
b'V'
b'W'
b'X'
b'Y'
b'Z'
b'['
b'\\'
b']'
b‘^’
b“
b'`
b'a'
b'b'
b'c'
b'd'
b'e'
b'f'
b'g'
b'h'
b'i'
b'j'
b'k'
比尔
我是
b'n'
b'o'
b'p'
b'q'
比尔
b的
b't'
b'u'
b'v'
b'w'
b'x'
b'y'
b'z'
b'{'
b'|'
b'}'
b'~'
b'\x7f'
b'\x80'
b'\x81'
b'\x82'
b'\x83'
b'\x84'
b'\x85'
b'\x86'
b'\x87'
b'\x88'
b'\x89'
b'\x8a'
b'\x8b'
b'\x8c'
b'\x8d'
b'\x8e'
b'\x8f'
b'\x90'
b'\x91'
b'\x92'
b'\x93'
b'\x94'
b'\x95'
b'\x96'
b'\x97'
b'\x98'
b'\x99'
b'\x9a'
b'\x9b'
b'\x9c'
b'\x9d'
b'\x9e'
b'\x9f'
b'\xa0'
b'\xa1'
b'\xa2'
b'\xa3'
b'\xa4'
b'\xa5'
b'\xa6'
b'\xa7'
b'\xa8'
b'\xa9'
b'\xaa'
b'\xab'
b'\xac'
b'\xad'
b'\xae'
b'\xaf'
b'\xb0'
b'\xb1'
b'\xb2'
b'\xb3'
b'\xb4'
b'\xb5'
b'\xb6'
b'\xb7'
b'\xb8'
b'\xb9'
b'\xba'
b'\xbb'
b'\xbc'
b'\xbd'
b'\xbe'
b'\xbf'
b'\xc0'
b'\xc1'
b'\xc2'
b'\xc3'
b'\xc4'
b'\xc5'
b'\xc6'
b'\xc7'
b'\xc8'
b'\xc9'
b'\xca'
b'\xcb'
b'\xcc'
b'\xcd'
b'\xce'
b'\xcf'
b'\xd0'
b'\xd1'
b'\xd2'
b'\xd3'
b'\xd4'
b'\xd5'
b'\xd6'
b'\xd7'
b'\xd8'
b'\xd9'
b'\xda'
b'\xdb'
b'\xdc'
b'\xdd'
b'\xde'
b'\xdf'
b'\xe0'
b'\xe1'
b'\xe2'
b'\xe3'
b'\xe4'
b'\xe5'
b'\xe6'
b'\xe7'
b'\xe8'
b'\xe9'
b'\xea'
b'\xeb'
b'\xec'
b'\x'
b'\xee'
b'\xef'
b'\xf0'
b'\xf1'
b'\xf2'
b'\xf3'
b'\xf4'
b'\xf5'
b'\xf6'
b'\xf7'
b'\xf8'
b'\xf9'
b'\xfa'
b'\xfb'
b'\xfc'
b'\xfd'
b'\xfe'
b'\xff'
运行代码将返回此值。为了使我的程序正常运行,我需要将像b'!'这样的值作为b'\x20'返回。我可以做些什么来完成此操作?感谢您的帮助!

字节值是正确的。Python只会选择在可能的情况下向您显示ASCII字符,以帮助调试:

>>> bytes([0x21])
b'!'
>>> bytes([0x21])[0]
33
实际字节值仍然是33位十进制,21位十六进制,但该字节映射到ASCII字符。每当您为
字节
对象生成表示(
repr()
)输出时,任何可打印的ASCII码点都将显示为这样,因为这样可读性要高得多。某些字符(换行符、回车符)使用相应的代码显示,例如
\n
\r
,而只有其余的使用
\xhh
十六进制代码。在调试代码处理字节时,您希望Python显示
b'\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x0a'
还是
b'Hello world\n'

如果要显示十六进制值,请显式格式化字节值:

print(format(byte[0], '02x'))
将其显示为2位小写十六进制,或

print(format(byte[0], '#04x'))
要包含前导的
0x
。请将
X
用作大写字母

演示:

如果要显示一系列字节,可以使用:


通过一点格式设置,您可以使任何二进制文件同时以十六进制和ASCII表示形式显示。

为什么
b'!'
会显示为
0x20
,是吗?
0x20
是ASCII中的一个空格。
0x21
”!“
。当您在十六进制编辑文件并希望自动化冗长乏味的过程时。在我的ca中se,hacking Super-Smash Bros.
'!'==b'\x20'
返回
True
@Jordanbarkley:但是当你遇到一个包含嵌入文本的部分时,你希望看到的是实际的文本,而不是一系列转义码。Python选择后一个选项作为默认表示。如果你想要不同的显示,请格式化数据。如果你指定了如果您对每个字符的十六进制值
c
感兴趣,您可以始终这样做:
hex(ord(c))
,在
c='!'
的情况下,它将生成字符串
'0x21'
@muddyfish:不,您不能。您可以使用
codecs.encode(bytesobj,'hex'))
,但是Python 3中的
字节
对象没有
.encode()
方法。
codecs.encode()
,第二个参数是
'hex'
binascii.hexlify()
binascii.b2a\u hex()的别名),所以您也可以直接使用它。对python 3来说是可以的,但它在py2中确实可以工作。我只是没有读到op是什么in@muddyfish:在Python3中打印时,您只能看到
b'…'
文字符号。
print(format(byte[0], '#04x'))
>>> format(bytes([0x21])[0], '02x')
'21'
>>> format(bytes([0x21])[0], '#04x')
'0x21'
>>> from binascii import hexlify
>>> hexlify(b'Hello world\n')
b'48656c6c6f20776f726c640a'
>>> print(hexlify(b'Hello world\n').decode('ASCII'), b'Hello world\n', sep='\t')
48656c6c6f20776f726c640a    b'Hello world\n'