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

Използвам модул python struct за създаване на персонализирани двоични файлове.

Самият файл има следния формат:

4 bytes (цяло число) 1 byte (неподписан char) 4 bytes (float)

4 bytes (цяло число) 1 byte (неподписан char) 4 bytes (float)

.......................... (100 000 такива реда)

4 bytes (цяло число) 1 byte (неподписан char) 4 bytes (float)


В момента използвам 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 и/или туршия модули.

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