2016-02-05 2 views
1

Я использую этот код пакета данных,Python struct.pack имеют избыточную 0

данных = struct.pack ("bb3sb4si", 0x11, 3, 'ABC', 4 'KKKK', 0x12345678

и отправить его на мой сервер.

Но мой сервер получить этот

enter image description here

Почему у меня избыточный двойной 0?

ответ

3

Вы неловко используете native alignment; дополнительные байты заставляют конечное целое число начинаться с 4-байтовой границы. Отключение выравнивания с помощью префикса = удаляет дополнительное дополнение.

$ cat pack.py 
import struct 
import sys 
data = struct.pack("=bb3sb4si", 0x11, 3, 'abc', 4, 'kkkk', 0x12345678) 
sys.stdout.write(data) 

$ python pack.py | xxd 
0000000: 1103 6162 6304 6b6b 6b6b 7856 3412  ..abc.kkkkxV4. 
Смежные вопросы