2015-03-22 5 views
0

В настоящее время я пытаюсь извлечь необработанные двоичные байты из файла, например. 000001001000Python - Ошибка при попытке извлечь байты из файла

f = open(r"file.z", "rb") 
try: 
    byte = f.read(); 
    print int(byte) 
finally: 
    f.close() 

Причина, почему я использовал Int (байт) должен был иметь быстрый взгляд на то, что строка выглядит. (Я не мог напечатать его, потому что [Decode ошибка - выход не UTF-8])

Traceback (most recent call last): 
    File "C:\Users\werdnakof\Downloads\test.py", line 9, in <module> 
    print int(byte); 
ValueError: invalid literal for int() with base 10: '\x04\x80e\x06\xc0l\x06\xf0,\x02' 

возвращает \ x04 \ x80e \ x06 \ xc0l \ x06 \ xf0, \ x02

И Я не слишком уверен, куда идти отсюда. Мне сказали, что это в 12 бит, исправлено с кодами, расположенными слева.

Любые советы или советы о том, как это решить? Все, что я хочу, это 12-разрядное число eg000001001000

+0

попробовать 'Int (byte.encode ('UTF-8'))' – itzMEonTV

+0

Привет, он возвращает: UnicodeDecodeError: кодек ascii не может декодировать байт 0x80 в позиции 1: порядковый не в диапазоне (128) – creampiedonut

+0

вы можете предоставить 'file.z' некоторые строки здесь? – itzMEonTV

ответ

0

Использование кодирования и бен:

bin(int(b.encode("hex"),16)) 

In [27]: b='\x04\x80e\x06\xc0l\x06\xf0,\x02' 
In [28]: int(b.encode("hex"),16) 
Out[28]: 21257928890331299851266L 
In [29]: bin(int(b.encode("hex"),16)) 
Out[29]: '0b10010000000011001010000011011000000011011000000011011110000001011000000001 



with open("file.z","rb") as f: 
    for line in f: 
     print(int(line.encode("hex"), 16)) 
+0

Привет, меня немного путают с базой 16 внутри int() после того, как вы закодировали ее с помощью hex ... можете ли вы описать, что вы делаете? – creampiedonut

+0

вы кодируете строку в шестнадцатеричный, а затем конвертируете в 'int', используя base' 16' для hex. Если бы он был двоичным, вы использовали бы базу '2' для восьмеричной базы' 8' и т. Д. –

+1

ОК, спасибо за помощь! – creampiedonut

0

Чтобы распечатать содержимое бинарной строки, вы можете преобразовать его в HEX-представление:

print byte.encode('hex') 

Для чтения двоичных структур, вы можете использовать-структуру -модуль.

0

Вы можете попробовать это

f = open("file.z", "rb") 
try: 
    byte = f.read(); 
    print(bin(int(str(byte).encode("hex"),16))) 
finally: 
    f.close() 

От ответа Padraic Каннингема

Смежные вопросы