Python 3: невозможно преобразовать двоичные данные в текст - PullRequest
0 голосов
/ 06 мая 2019

В одном из моих проектов я хочу передать двоичный файл, который является микропрограммой микроконтроллера: «firmware.bin». Это выглядит так:

007c 0020 4da0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 018a 0000 49a0 0000 bd82 0000 058a 0000 098a 0000 7182 0000 118a 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 49a0 0000 ...

Содержимое печатается на URL, который я вызываю для получения данных. По URL он конвертируется в текст и выглядит так:

| MIIIIIIIIIIII I I I I q I I I IIIIIIIIIIIII

...

Когда я читаю это обратно, я получаю следующее:

007c 0020 4def bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 01ef bfbd 0000 49ef bfbd 0000 efbf bdef bfbd 0000 05ef bfbd 0000 09ef bfbd 0000 71ef bfbd 0000 11ef bfbd 0000 49ef bfbd 0000 49ef bfbd 0000 49ef bfbd

, что отличается от того, что я имел в первую очередь.

Это код:

# download the data
r = requests.get(URL);

# save it to bin file
data = r.text.encode('utf-8')
f.write(bytes(data))

Знаете, что я делаю не так?

EDIT

Я нашел решение. Я использовал echo file_get_contents ($ file) , чтобы напечатать мой двоичный файл в моей программе PHP. Похоже, что он обрезает некоторые символы, такие как 0x00 ... Так что теперь я использую: echo bin2hex (file_get_contents ($ file)) * , извлеките полные данные в строке в моей программе Python и выгрузите их в файл с f.write (bytes.fromhex (data))

...