我正在尝试用 Python 编写我自己的小 PNG 阅读器。文档中有一些我不太明白的东西。在第 3.3 章(处理块的地方)它说:
类型代码的四位,即每个字节的位 5(值 32),用于传达块属性。这种选择意味着人类可以根据类型代码的每个字母是大写(第 5 位为 0)还是小写(第 5 位为 1)来读取分配的属性。然而,解码器应该通过数值测试指定位来测试未知块的属性;测试一个字符是大写还是小写是低效的,如果使用特定于语言环境的大小写定义,甚至是不正确的。
好的,所以它明确表示不应该测试一个字节是大写还是小写。那么,我如何检查那个位 5?
此外,文件指出
辅助位:第一个字节的第 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为索引(当然是从右边开始)。这就是我要寻找的吗?