Как преобразовать целые числа, прочитанные из текстового файла, и сохранить их в виде двоичного файла, имеющего 16-битные целые числа? - PullRequest
0 голосов
/ 19 апреля 2019

пытается прочитать десятичные значения из текстового файла, преобразовать в 16-разрядный двоичный файл и в двоичный файл.

Пример входного файла

120
300
-250
13
-120

Код:

def decimaltoBinary(filename,writefile):
    file = filename
    print(file)
    file_write = open(writefile,'wb')
    file_read = open(file, 'rb')
    for line in file_read:
        value = int(line)
        if value < 0:
            binary_value = bin((2**16) - abs(value))[2:].zfill(16)
            file_write.write(binary_value + "\n")
        else:
            binary_value = bin(int(value))[2:].zfill(16)
            file_write.write(binary_value + "\n")
    file_write.close()

decimaltoBinary(input_file.text,output_file.bin)

Надеясь записать преобразованные десятичные значения в двоичный файл ... любая помощь очень ценится

1 Ответ

0 голосов
/ 19 апреля 2019

Для этого можно использовать модуль struct :

data = [120,300,-250,13,-120] # you seem to have the reading part covered already
                              # using a list as data input for demo purposes
import struct

with open("f.bin","wb") as f: 
    for d in data:
        f.write(struct.pack('h', d)) # 2 byte integer aka short

with open("f.bin","rb") as f:
    print(f.read())  # b'x\x00,\x01\x06\xff\r\x00\x88\xff'

Вам просто нужно указать 'h', чтобы получить короткую (2-байтовое целое) упаковку.

Для причудливого вывода на печать виноват python - он заменяет «известные» \xXX коды на короче нормальные символы - например, ',' => 0x2c или \r => \x0d и т. Д.

...