структура python, порядок байтов и выравнивание для сетевого приложения и разница между unsigned int и unsigned long

У меня есть 2 вопроса о struct в документации по Python:

Порядок байтов, размер и выравнивание : для связи по сети следует использовать ! вместо = ?
например: struct.pack("!BBH", 1, 12, 512) или struct.pack("=BBH", 1, 12, 512) ?

Формат символов: в чем разница между целым числом без знака (I) и unsigned long (L), так как оба 4 байта?

Спасибо за ваше время, и простите меня, если это глупый вопрос :-)


person Johny_M    schedule 25.07.2011    source источник


Ответы (1)


Если вы хотите, чтобы ваш код выдавал один и тот же результат, где бы он ни выполнялся, зачем вам когда-либо использовать =? Так что, конечно, да, вы должны использовать код, который означает одно и то же для всех. Стандарт !, поэтому используйте !.

Прочитайте заголовок над таблицей кодов форматов:

Столбец «Стандартный размер» относится к размеру упакованного значения в байтах при использовании стандартного размера; то есть, когда строка формата начинается с одного из '‹', '>', '!' или '='. При использовании собственного размера размер упакованного значения зависит от платформы.

Таким образом, если вы используете код формата @ или опускаете код формата, размер I и размер L теоретически могут отличаться в зависимости от вашей платформы.

person agf    schedule 25.07.2011