Python 由列表构造函数强制转换为int的字节
我想从一个二进制文件中读取n个字节,并将每个字节存储在一个列表中。但是,当我这样做时,每个字节都被转换成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
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没有转换任何东西。解释器只是显示字节数组的十进制值。什么是单字节
字节对象列表的点?你真的需要吗?可能不受支持,因为这是一个罕见的用例…您的预期输出是什么?我想您是对的。我的用例是在文件上有一个滑动窗口,所以我在文件中前进时在右边添加一个字节,在左边删除一个字节。