【发布时间】:2021-10-06 08:44:07
【问题描述】:
我编码和解码了一堆系数(与我之前的question有关)。该过程基于 RLE,其中对一堆系数进行编码,运行时编码仅关注零。简而言之,这是原始数组:
[200, -145, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
编码成如下所示的二进制数据:
['000011001000', '11001>101101111<', '000010001110110011', '00010000111>1011110<', '00011000110011101', '000100011']
为了避免看起来像 -10010001 (-145) 的二进制数,我手动对负数执行二进制补码(因为我找不到内置方式)。在这种情况下,数字 (-145, -34) 的结果是 (101101111, 1011110)。 为避免混淆,我将它们标记在上面的数组中以供本问题使用。
这被填充为可被 8 整除(最后一个元素在开头插入了 0),分成字节并写入文件。
当我读取文件时,我成功解码了大部分内容,并且系数的数量与开始的相同。问题出在负值上:
[200, 367, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我得到 367 而不是 -145,而不是 -34 我得到 94。
是否有任何内置方式(或任何方式)将位串转换为有符号值?我觉得这会解决我的问题。我一直找不到方法,现在被困住了。
【问题讨论】:
标签: python-3.x integer bit signed