我想读取 n 字节的二进制文件并将每个字节存储在列表中。但是,当我这样做时,每个字节都被转换为int
。
首先我创建一个随机文件。
$ head -c 16 > random.file
然后我尝试阅读它:
>>> with open('random.file', 'rb') as fp:
... l = list(fp.read(8))
... print(fp.read(8))
...
b'@\xc2\xdf\x9f\xbbv\xa1\x90'
>>> l
[79, 233, 19, 116, 252, 50, 248, 144]
>>> type(l[0])
<class 'int'>
所以我理解我的字节值不能超过255
但是Python自动转换的事实导致问题,因为没有得到预期的类型。
这是正常的吗?我怎么能避免这个?
答案 0 :(得分:1)
您在字节列表中访问的任何单个字节只是一个int值:
>>> b"foo"[0]
102
如果要创建一个包含长度为1的字节列表的新列表,则必须明确地执行此操作:
>>> c = b"foo"
>>> l = []
>>> for i in range(0, len(c)):
... l.append(c[i:i+1])
>>> l
[b'f', b'o', b'o']
但是我不确定我是否认为有任何理由这样做,因为访问现在嵌入新列表中的单个值将再次返回一个int。