这是我的代码:
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?
答案 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)