Python читает двоичные значения как ASCII - PullRequest
0 голосов
/ 08 февраля 2019

Я использую Python 3.7.По какой-то причине мой код читает двоичные файлы как строковые входы вместо двоичных объектов.Я не могу понять, что является причиной этого, и то, что я написал, похоже, соответствует тому, что другие люди используют в своих решениях для чтения двоичного файла.

import sys

filename = sys.argv[1]
with open(filename, "rb") as f:
    byte = f.read(1)
    while byte:
        print(byte)
        print(type(byte))
        byte = f.read(1)

Я думаю, это может быть связано с тем, каккод, который написал бинарный файл написан.Вот код для этого:

messages=[[101,1,0,2,10,3,1,4,0],
      [101,1,1,2,9,3,1,4,0],
      [101,1,2,2,8,3,1,4,0],
      [101,1,3,2,7,3,1,4,0],
      [101,1,4,2,6,3,1,4,0],
      [101,1,5,2,5,3,0,4,1],
      [101,1,6,2,4,3,0,4,1],
      [101,1,7,2,3,3,0,4,1],
      [101,1,8,2,2,3,0,4,1],
      [101,1,9,2,1,3,0,4,1],
      [101,1,10,2,0,3,0,4,1]]

newFile = open("testData.bin", "wb")
for message in messages:
    line=[]
    for value in message:
        bValue=value.to_bytes(1, byteorder='big',signed=False)
        line.append(bValue)
        newFile.write(bValue)

Мои текущие результаты состоят в том, что первая строка выводит значение ascii файла, а вторая - что это строка.

1 Ответ

0 голосов
/ 09 февраля 2019

При отображении представления byte интерпретатор Python отобразит символ ASCII, соответствующий byte, если значение байта находится в диапазоне 0–127, и символ может быть представлен.В противном случае будет отображаться экранирование в шестнадцатеричном формате.

Возьмите первый список из messages в качестве примера.

>>> m = messages[0]
>>> m
[101, 1, 0, 2, 10, 3, 1, 4, 0]
>>> bs = b''.join(x.to_bytes(1, byteorder='big', signed=False) for x in m)
>>> bs
b'e\x01\x00\x02\n\x03\x01\x04\x00'

101 и 10 - отображаемые символы ASCII

>>> chr(101)
'e'
>>> chr(10)
'\n'

так что вы видите эквиваленты ASCII в последовательности байтов.0, 1, 2, 3 и 4 не отображаются, поэтому вместо них отображаются шестнадцатеричные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...