Python PNG块类型代码位#5
我正试图用Python编写我自己的小PNG阅读器。这本书里有些东西我不太明白。在第3.3章(处理块的地方)中,它说: 类型代码的四位,即每个字节的第5位(值32),用于传递块属性。这 选择意味着人类可以根据类型的每个字母 代码为大写(第5位为0)或小写(第5位为1)。然而,解码器应该测试未知数据的属性 通过对指定位进行数字测试来实现数据块;测试字符是大写还是小写 如果使用特定于区域设置的案例定义,则效率低下,甚至不正确 好的,所以它明确表示应该而不是测试一个字节是大写还是小写。那么,如何检查第5位 此外,文件指出: 辅助位:第一字节的第5位Python PNG块类型代码位#5,python,png,file-format,bit,Python,Png,File Format,Bit,我正试图用Python编写我自己的小PNG阅读器。这本书里有些东西我不太明白。在第3.3章(处理块的地方)中,它说: 类型代码的四位,即每个字节的第5位(值32),用于传递块属性。这 选择意味着人类可以根据类型的每个字母 代码为大写(第5位为0)或小写(第5位为1)。然而,解码器应该测试未知数据的属性 通过对指定位进行数字测试来实现数据块;测试字符是大写还是小写 如果使用特定于区域设置的案例定义,则效率低下,甚至不正确 好的,所以它明确表示应该而不是测试一个字节是大写还是小写。那么,如何检查第5
0(大写)=关键,1(小写)=辅助 我使用以下函数将整数转换为位流:
def bits(x, n):
""" Convert an integer value *x* to a sequence of *n* bits as a string. """
return ''.join(str([0, 1][x >> i & 1]) for i in xrange(n - 1, -1, -1))
例如,以sRGB
块为例。小写的s
表示块是辅助的。但是比较大写的S
和小写的S
01110011
01010011
我们可以看到,在这两种情况下,位5都是零
我想我对数一数二的理解是错误的。由于唯一更改的位是第三个位(即用2索引),我假设这就是我正在搜索的位?它也是从右边开始的第6位,并用5索引(当然是从右边)。这就是我要搜索的吗?Python确实有按位操作。当他们已经给了您位掩码(32或0x20)时,您的操作非常困难 或者,相当于:
is_critical = (type_code & (0x1 << 5)) == 0
is_critical=(键入_code&(0x1-Ha-right)我没有想到xD,谢谢。顺便说一句,32的十六进制不是0x20吗?如果你觉得有用,我已经用Java编写了一个PNG读写器(完整,除了交错),它是开源的:
is_critical = (type_code & (0x1 << 5)) == 0