2016-10-10 15 views
2

私はitertool関数を使ってリストに値を入力しています。 itertool関数はintではなく、strとして値を取っています。その後、リストからその値を2進数に変換する必要があります。問題は、負の値を変換する必要があるときに発生します。 -5。私のコードはstrとして " - "を取っていますが、私はそれを次の数値の前に負の記号として考える必要があります。Pythonで署名付きの文字列をバイナリに変換するには?

私のコードは -

L3= list(itertools.repeat("-1",5)) 

file= open(filename, 'w') 

L3_1=[ ] 

for item in L3: 

     x3=bytes(item,"ascii") 
     L3_1.append(' '.join(["{0:b}".format(x).zfill(8) for x in x3])) 

for item in L3_1: 

     file.write("%s\n" % item) 

file.close() 
+1

期待される結果は何ですか?バイナリ形式の絶対値?予想される入出力が役に立つでしょう。 – brianpck

+0

はい、私はバイナリで絶対値を必要とします。入力= -5の場合、出力は= 11111011 – rrra

+0

になります。これは 'abs(-5)'のバイナリではありません... – brianpck

答えて

0

それは私が間違った仮定を行う場合ので、私を修正してくださいどのような問題であり、何を達成したい、完全には明らかではありません。

とにかく、整数をバイナリ表現に変換するのは、binを使って簡単に行えます。たとえば、bin(5)'0b101'です。さて、bin(-5)'-0b101'です。これは他の言語のバイナリに使用されているときに期待したものではありません。 C.

「問題」は、Pythonの整数はではなく、の固定サイズです。 int16,int32,uint8などはありません。 Pythonは必要なだけビットを追加します。つまり、負の数は、がその補数で表されないことを意味します。0b11111011は、ではなく-5ですが、バイナリは潜在的に無限であるため、符号ビットを配置する固定位置はありません。したがって、Pythonは明示的単項を追加する必要があります-。これはと異なるから-5を文字列として"-""5"と解釈しています。

負の値のバイナリ表現を取得する場合は、の固定サイズの整数を自分で作成する必要があります。あなたが最初に望んでいた何をすべきか今

def bin_int(number, size=8): 
    max_val = int('0b' + ('1'* (size - 1)), 2) # e.g. 0b01111111 
    assert -max_val <= number <= max_val, 'Number out of range' 
    if number >=0: 
     return bin(number) 
    sign = int('0b1' + ('0' * size), 2) # e.g. 0b10000000 
    return bin(number + sign) 

を、::これは次のようになりますん機能は、ファイルに数字のバイナリ表現を記述します。

output_list = [1, -1, -5, -64, 0] # iterable *containing* integers 
with open(filename, 'w') as output_file: # with statement is safer for writing 
    for number in output_list: 
     output_file.write(bin_int(number) + '\n') 

それとも、ただ結果をチェックしたい場合:

print([bin_int(number) for number in [1, -1, -5, -64, -127]]) 
# ['0b1', '0b11111111', '0b11111011', '0b11000000', '0b10000001'] 

(注)0bを削除したい場合は、あなたが行うことができますようbin_int(number)[2:]を経由して、例えばをoutput_file.write(bin_int(number)[2:] + '\n')。これにより、バイナリ表現を保持する文字列から最初の2文字が削除されます。

+0

多くの多くのありがとう – rrra

関連する問題