怎么会呢解包结构以及结构包作品?

2024-10-03 11:13:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试学习如何解析PPM文件。我在python解释器中执行了以下操作:

>>> x = open('file.ppm')
>>> x.readline()
'P6\n'
>>> x.readline()
'2 3\n'
>>> x.readline()
'255\n'
>>> x.readline()
'\n'
>>> x.readline()
'\x174R\x03\xd7\x1e\xb5e!-\xcd(D\\oL\x01'

我了解PPM文件的基本结构。不过,我最好奇的是最后一行。包含像素颜色信息的字节编码。上面的文件应该解析回

^{pr2}$

通过使用struct.pack('B',x),我看到整数被压缩到上面的字节编码中。但是,我不确定如何使用struct.unpack来反转这个过程。最重要的是,我不确定从哪里切断每个字节的编码,因为它们都出现在同一行上,而且每个字节的长度似乎也不相同(?)。在

我还试图通过执行struct.pack('I','\x174R\x03\xd7\x1e\xb5e!-\xcd(D\\oL\x01')来打包整行代码。我不明白为什么它不能直接把字节编码转换成整数。在

如何使用struct.pack(...)将字节编码解析回整数?另外,在打包/解包这些值时发生了什么?在


Tags: 文件编码readline字节整数structpackol
1条回答
网友
1楼 · 发布于 2024-10-03 11:13:09

前三个字符串不是由struct.pack压缩的。所以只需使用它们(strip或{},如果您想删除周围的空格)。在

>>> 'P6\n'
'P6\n'
>>> 'P6\n'.rstrip()
'P6'

对于最后一个字节:

^{pr2}$

或者使用^{}:(在python3.x中可以使用^{});迭代bytearray生成{}s

>>> list(bytearray(b))
[23, 52, 82, 3, 215, 30, 181, 101, 33, 45, 205, 40, 68, 92, 111, 76, 1]

当你在处理二进制文件时,你的注释是二进制的。在

f = open('file.ppm', 'rb') # b: binary mode

相关问题 更多 >