あなたが実際にビットを取得しようと右(だけではなく、値を中央にしようと)している場合は、あなたが異なるが必要戦略。 -1001001
は、実際には-73
です。
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)
をただし、あなたが読んでいるデータが署名されることを意図されている場合、その後:8ビット量については、このの2の補数のバージョンは、実際には以下の何をするかである--which 10110111
だろうあなたは、データを変換するためにstruct.unpack()
を使用することができます。
binary =' '.join('{0:08b}'.format(struct.unpack('b', x)[0], 'b') for x in content)
それとも、代わりにこれを使用することができます:
def to_signed_char(x):
if x >= 128:
return x - 256
return x
binary = ' '.join('{0:08b}'.format(to_signed_char(x), 'b') for x in content)
それは本当にあなたが阿智しようとしているかに依存しますここにイブ。
おそらく '(ord(x)+ 128)%256'が必要でしょうか?しかし、なぜこのようなものが欲しいのかは、汚いです。 – o11c