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

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

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

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

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

1 Ответ

2 голосов
/ 26 июля 2011

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

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

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

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

...