いくつかの複雑なプロジェクトに取り組んでいる間、私は面白いバグに出くわした:のPython - バイナリにnumとnum個のバイナリ - 間違った出力
コードは、ファイルを読み込み、整数にバイナリ変換し、ファイルに書き込みます。 他の人はこのファイルを読み取り、整数をバイナリに変換してファイルに書き込みます。
理想的には、入力ファイルと変換ファイルは同じである必要があります。しかし、それは起こっていません。
P1は以下のコードを見つける:
def readDecDataFromFile(filename):
data = []
with open(filename) as f:
data = data + f.readlines()
chunks, chunk_size = len(data[0]), 6
return [ data[0][i:i+chunk_size] for i in range(0, chunks, chunk_size) ]
def numToBinary(N):
return str(int(bin(int(N))[2:]))
ddata = readDecDataFromFile('im1')
bytes = []
for d in ddata:
bits = numToBinary(d)
bytes.append(int(bits[::-1], 2).to_bytes(1, 'little'))
f = open('orig_input', 'wb')
for b in bytes:
f.write(b)
f.close()
:
# read file -> convert to binary -> binary to num -> write file
def bits(f):
byte = (ord(b) for b in f.read())
for b in byte:
bstr = []
for i in range(8):
bstr.append((b >> i) & 1)
yield bstr
def binaryToNum(S):
bits = len(S)
if (S==''): return 0
elif (S[0] == '0'): return binaryToNum(S[1:])
elif (S[0] == '1'): return ((2**(bits-1))) + binaryToNum(S[1:])
bstr = []
for b in bits(open('input_test', 'r')):
bstr.append(b)
dstr = ''
for i in bstr:
b_num = str(binaryToNum(''.join(str(e) for e in i))).zfill(6)
dstr = dstr + b_num
ter = open('im1', 'w')
for item in dstr:
ter.write(item)
ter.close()
この部分は正しいようだが、私は他のマシン上のコードがこれを行うAZ、AZと0-9
のために手動で確認
出力は次のとおりです。
input_test: my name is XYZ
orig_input: my7ameisY-
バイト最終コードの結果: [b'm', b'y', b'\x01', b'7', b'a', b'm', b'e', b'\x01', b'i', b's', b'\x01', b'\x0b', b'Y', b'-', b'\x05']
潜在的なエラーは何か?