Мне трудно манипулировать этими данными. Если я попытаюсь напечатать каждую строку, python зависнет и издаст звуковой сигнал (я думаю, что где-то там есть двоичный звуковой код). Как безопасно использовать эти данные? Как преобразовать каждое шестнадцатеричное число в десятичное?
Это напечатает десятичные числа для каждого символа:
s = '\xbe\x00\xc8d\xf8d\x08\xe4.\x07~\x03\x9e\x07\xbe\x03\xde\x07\xfe\n'
print ' '.join(str(ord(c)) for c in s)
Ответ 3 · рейтинг 3 · John Machin
Двоичные данные редко делятся на "строки", разделенные символом "\n". Если это так, он будет иметь неявный или явный механизм escape, чтобы различать '\n' как признак конца строки и '\n' как часть данных. Читать такой файл как строки вслепую, не зная механизма выхода, бессмысленно.
Чтобы ответить на ваши конкретные проблемы:
'\x07' - это символ ASCII BEL, который изначально предназначался для звонка в звонок на телетайпе.
Вы можете получить целочисленное значение байта "b", выполнив ord(b).
ОДНАКО, чтобы правильно обрабатывать двоичные данные, вам необходимо знать макет. У вас могут быть целые числа со знаком и без знака (размером 1, 2, 4, 8 байт), числа с плавающей запятой, десятичные числа различной длины, строки фиксированной длины, строки переменной длины и т. д. Дополнительные сложности возникают из-за того, записываются ли данные в бигендианской моде или литэндийской моде. Как только вы узнаете все вышеперечисленное (или сделаете очень обоснованные предположения), модуль структуры Python должен использоваться для всей или большей части вашей обработки; также может быть полезен модуль ctypes.
Есть ли у формата данных имя? Если да, сообщите нам; мы можем указать вам код или документы.
Вы спрашиваете: "Как мне безопасно использовать эти данные?" напрашивается вопрос: для чего вы хотите его использовать? Какие манипуляции вы хотите сделать?
Ответ 4 · рейтинг 2 · Mattias Nilsson
Как упоминалось в театре, ord и hex могут вам помочь. Если вы хотите попытаться интерпретировать какие-либо структурированные двоичные данные в файле, struct Модуль может быть полезен.
Ответ 5 · рейтинг 1 · Yann Ramin
Вы пытаетесь напечатать данные, преобразованные в символы ASCII, что не сработает.
Вы можете смело использовать любой байт данных. Если вы хотите напечатать его как шестнадцатеричный, посмотрите на функции ord и hex/
Ответ 6 · рейтинг 1 · Paul Richter
Вы используете read() или readline()? Вы должны использовать read(n) для чтения n байтов; readline() будет читаться до тех пор, пока не встретит новую строку, которой может не быть в двоичном файле.
Однако в любом случае вам возвращается строка байтов, которая может быть печатаемыми или непечатаемыми символами и, вероятно, не очень полезна.
Вам нужно ord(), которое преобразует однобайтовую строку в соответствующее целочисленное значение. read() из файла по одному байту за раз и вызвать ord() для результата или выполнить итерацию по всей строке.
Ответ 7 · Sébastien Boisgérault
Если вы хотите использовать NumPy и bitstream, вы можете сделать