二进制运算后删除“ - ”

时间:2017-10-07 16:36:58

标签: python binary

这是我的代码:

with open("bin.bin", "rb") as file:
    content=file.read()
    binary = bin(int(binascii.hexlify(content), 16))
    binary = ' '.join('{0:08b}'.format(ord(x)-128, 'b') for x in content)
    print binary

我的输出格式为:

01100111 -1001001 00011110

如何摆脱“ - ”并将其替换为0?

2 个答案:

答案 0 :(得分:2)

如果你想要真正得到正确的位(而不是仅仅试图使值居中),你需要一个不同的策略。 name实际上是-1001001。对于8位数量,这个的二进制补码版本实际上是-73 - 这就是下面的内容:

10110111

但是,如果您要阅读的数据需要签名,那么您可以使用def convert_num(num, bits=8): if num >= 0: return num mask = (1 << bits) - 1 return ((-1 * num) ^ 0xFF) + 1 binary = ' '.join('{0:08b}'.format(convert_num(ord(x)-128), 'b') for x in content) 转换数据:

struct.unpack()

或者你可以改用它:

binary  =' '.join('{0:08b}'.format(struct.unpack('b', x)[0], 'b') for x in content)

这实际上取决于你在这里想要达到的目标。

答案 1 :(得分:0)

我的不好,刚刚找到答案,刚刚添加了abs()

binary  =' '.join('{0:08b}'.format(abs(ord(x)-128), 'b') for x in content)