我有一个位图图像并使用this page我试图读取文件大小。
如果链接断开:
FileSize | 4个字节|文件大小(以字节为单位)
这是我要读取的位图BM\xe6\x04\x00\x00\x00\x00\x00\x006
的一部分,据我所知,文件大小介于第3和第7个字节之间。所以\xe6\x04\x00\x00
。
我删除了所有\x00
因为它们是空值而且没有告诉我有关文件大小的任何信息,所以我使用了:
raw = '\xe6\x04\x00\x00'
character_list = [raw[b:b+1] for b in range(0, len(raw))]
non_empty = [list_ for list_ in character_list if list_ != b'\x00']
这让我回复:[b'\xe6', b'\x04']
现在我使用以下命令获取列表中的所有值:
size = ''
for byte in non_empty:
size += str(ord(byte))
print(size)
以下是转换结果:
\xe6
> 230
\x04
> 4
这会返回2304
(因为'230' + '4'
为2304
),而我的位图图片大小为1,254字节,磁盘上为4,096字节。显然这不是图像尺寸。我哪里出错?
作为旁注。如果我拍摄另一个大小为90字节的图像并使用Z\x00\x00\x00
运行相同的过程,它会按照我的预期返回90。 (ord('Z')
返回90)。
答案 0 :(得分:2)
从戳到它看起来像位图中的大小的字节顺序是小端(https://en.wikipedia.org/wiki/Endianness#Little-endian)。
有一个int的内置方法可以将字节转换为整数。 https://docs.python.org/3/library/stdtypes.html#int.from_bytes
例如:
raw = b'\xe6\x04\x00\x00'
size = int.from_bytes(raw, byteorder='little')
print(size)