Найти - Пользователи
Полная версия: как преобразовать к заданному типу?
Начало » Python для новичков » как преобразовать к заданному типу?
1 2
kpoxa
Есть бинарный файл. Формат известен. Считываю первые 4 байта в переменную:
s = file.read(4)

А далее не могу прочитать эту переменную как int.
Как это в питоне делается?
k0sh
int(s)
kpoxa
если бы это работало, то я бы не спрашивал :(
kpoxa
Вот из документации

int(x )
Преобразует строку или число (любого типа, кроме комплексного) x в простое
целое (int).

В моем же случае, x - “сырая память”, а не число и не строка.
Потому эта функция не работает.

Я питон не понимаю, потому и спрашиваю, как делаются преобразования типов???
regall
kpoxa
Есть бинарный файл. Формат известен.
Если формат известен - воспользуйтесь модулем struct: http://docs.python.org/library/struct.html
k0sh
Упс сори, не правильно понял вопрос:
>>> struct.unpack("<L", s)[0]
kpoxa
regall
kpoxa
Есть бинарный файл. Формат известен.
Если формат известен - воспользуйтесь модулем struct: http://docs.python.org/library/struct.html
Формат известен мне. Но это не общедоступный формат.
kpoxa
k0sh
Упс сори, не правильно понял вопрос:
>>> struct.unpack("<L", s)[0]
Упс, а я не понял ответ :(
k0sh
А что конкретно не понятно?
import struct
s = f.read(4)
i = struct.unpack("<L", s)[0]
unpack(format, string)
Распаковывает строку string в соответствии с форматом format и возвра-
щает кортеж объектов. Строка должна содержать ровно такое количество дан-
ных, которое требует строка формата, то есть длина строки должна быть равной
calcsize(format).
kpoxa
Пока я придумал только один путь. Не думаю, что он оптимальный.

s = file.read(4)
i = ord(s) + ord(s) * 256 + ord(s) * 256 * 256 + ..

Идея в том, чтобы восстановить целое из потока символов.
В общем, если возможен только такой путь (во что трудно поверить), то это крайне низко опускает питон в моих глазах. Но я новичок.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB