Форум сайта python.su
Есть бинарный файл. Формат известен. Считываю первые 4 байта в переменную:
s = file.read(4)
А далее не могу прочитать эту переменную как int.
Как это в питоне делается?
Офлайн
int(s)
Офлайн
если бы это работало, то я бы не спрашивал :(
Офлайн
Вот из документации
int(x )
Преобразует строку или число (любого типа, кроме комплексного) x в простое
целое (int).
В моем же случае, x - “сырая память”, а не число и не строка.
Потому эта функция не работает.
Я питон не понимаю, потому и спрашиваю, как делаются преобразования типов???
Офлайн
kpoxaЕсли формат известен - воспользуйтесь модулем struct: http://docs.python.org/library/struct.html
Есть бинарный файл. Формат известен.
Офлайн
Упс сори, не правильно понял вопрос:
>>> struct.unpack("<L", s)[0]
Офлайн
regallФормат известен мне. Но это не общедоступный формат.kpoxaЕсли формат известен - воспользуйтесь модулем struct: http://docs.python.org/library/struct.html
Есть бинарный файл. Формат известен.
Офлайн
k0shУпс, а я не понял ответ :(
Упс сори, не правильно понял вопрос:>>> struct.unpack("<L", s)[0]
Офлайн
А что конкретно не понятно?
import struct
s = f.read(4)
i = struct.unpack("<L", s)[0]
unpack(format, string)
Распаковывает строку string в соответствии с форматом format и возвра-
щает кортеж объектов. Строка должна содержать ровно такое количество дан-
ных, которое требует строка формата, то есть длина строки должна быть равной
calcsize(format).
Отредактировано (Ноя. 2, 2009 11:51:34)
Офлайн
Пока я придумал только один путь. Не думаю, что он оптимальный.
s = file.read(4)
i = ord(s) + ord(s) * 256 + ord(s) * 256 * 256 + ..
Идея в том, чтобы восстановить целое из потока символов.
В общем, если возможен только такой путь (во что трудно поверить), то это крайне низко опускает питон в моих глазах. Но я новичок.
Офлайн