Python 由列表构造函数强制转换为int的字节

Python 由列表构造函数强制转换为int的字节,python,types,casting,Python,Types,Casting,我想从一个二进制文件中读取n个字节,并将每个字节存储在一个列表中。但是,当我这样做时,每个字节都被转换成int 首先,我创建一个随机文件 $ head -c 16 > random.file 然后我试着读它: 打开('random.file','rb')作为fp的>>: ... l=列表(fp.read(8)) ... 打印(fp.read(8)) ... b'@\xc2\xdf\x9f\xbbv\xa1\x90' >>>l [79, 233, 19, 116, 252

我想从一个二进制文件中读取n个字节,并将每个字节存储在一个列表中。但是,当我这样做时,每个字节都被转换成
int

首先,我创建一个随机文件

$ head -c 16 > random.file
然后我试着读它:

打开('random.file','rb')作为fp的
>>:
...     l=列表(fp.read(8))
...     打印(fp.read(8))
... 
b'@\xc2\xdf\x9f\xbbv\xa1\x90'
>>>l
[79, 233, 19, 116, 252, 50, 248, 144]
>>>类型(l[0])
因此,我知道我的字节值不能超过
255
,但是Python自动强制转换的事实导致了问题,因为无法获得预期的类型


这正常吗?如何避免这种情况?

在字节列表中访问的任何单个字节都只是一个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。

我认为Python没有转换任何东西。解释器只是显示字节数组的十进制值。什么是单字节
字节
对象列表的点?你真的需要吗?可能不受支持,因为这是一个罕见的用例…您的预期输出是什么?我想您是对的。我的用例是在文件上有一个滑动窗口,所以我在文件中前进时在右边添加一个字节,在左边删除一个字节。