Двоичные файлы в 32-битных/64-битных системах?

Я использую модуль python struct для создания пользовательских двоичных файлов.

Сам файл имеет следующий формат:

4 bytes (целое) 1 byte (беззнаковый символ) 4 bytes (с плавающей запятой)

4 bytes (целое) 1 byte (беззнаковый символ) 4 bytes (с плавающей запятой)

.......................... (100000 таких строк)

4 bytes (целое) 1 byte (беззнаковый символ) 4 bytes (с плавающей запятой)


В настоящее время я использую 32-битную машину для создания этих пользовательских двоичных файлов. Вскоре я планирую перейти на 64-битную машину.

Смогу ли я читать/записывать одни и те же файлы, используя обе машины {32bit / 64bit}? или я должен ожидать проблем с совместимостью?

(Я буду использовать Ubuntu Linux для обоих)


person user3262424    schedule 05.06.2011    source источник


Ответы (3)


Пока ваша строка формата структуры использует «стандартный размер и выравнивание» (< или >), а не «собственный размер и выравнивание» (@), ваши файлы можно использовать на разных платформах.

person dan04    schedule 05.06.2011

См. http://docs.python.org/library/struct.html#byte-order-size-and-alignment

По умолчанию типы C представлены в машинном формате и порядке байтов и должным образом выравниваются путем пропуска дополнительных байтов, если это необходимо (в соответствии с правилами, используемыми компилятором C).

Так что это зависит от вашего кода, является ли он переносимым или нет.

person ThiefMaster    schedule 05.06.2011

Вам есть о чем беспокоиться, кроме 32-битного или 64-битного. Широкая категория, о которой вы говорите, называется сериализация.

Взгляните на marshal и/или pickle.

person Nemo    schedule 05.06.2011
comment
благодарю вас. Я создаю свой собственный формат. Если я могу читать/записывать оба файла, используя 32/64-битные системы, почему я должен беспокоиться о marshal или pickle? - person user3262424; 05.06.2011
comment
Если все, что вас интересует, это x86 против x86_64, то, конечно, вы можете создать свое собственное решение. Но если вы используете стандартный механизм сортировки, который заботится о порядке байтов и представлениях с плавающей запятой, а также о размере слова, вы можете быть уверены, что ваш код будет портирован на любую систему в будущем. И количество кода, которое вам нужно написать, будет примерно таким же; может даже меньше. Итак, вопрос в том, почему бы не сделать внешний формат четко определенным и использовать правильное маршалирование? - person Nemo; 05.06.2011