Различия в чтении двоичных файлов между R и Python - PullRequest
0 голосов
/ 28 августа 2018

У меня есть двоичный файл, и я знаю, что первые 3 байта должны быть 0x6c, 0x1b и 0x01, в этом порядке. Я использовал python и R для загрузки файла.

Python: f = open('pathToFile', 'rb') f.read(3) Я получаю: out[2] b'l\x1b\x01'

Пока в R: readBin('pathToFile', what='raw', n=3) Я получаю [1] 6c 1b 01

Я не понимаю этого b'l' в выводе Python, так как я ожидаю 6c (как показывает вывод R).

Что я делаю не так?

1 Ответ

0 голосов
/ 28 августа 2018

Таким образом, двоичные значения - это просто числа. Используйте list(f.read(3)), чтобы увидеть это в python. R и Python просто используют два разных представления по умолчанию. R использует шестнадцатеричный , а Python использует ASCII \xhh для значений не ascii). Причиной этого различия является то, что Python является языком общего назначения, и многие (обычно старые, но не таковые) терминалы и программы используют 7-битную ascii для отображения вывода. R игнорирует это использование, так как обычно его интересуют только необработанные данные.

Чтобы получить шестнадцатеричное представление в python, используйте этот bytes подкласс

class BytesHex(bytes):
    def __repr__(self):
        return ' '.join('{:0>2x}'.format(b) for b in self)

BytesHex(b'l\x1b\x01')
Out[158]: 6c 1b 01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...