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