Я пытаюсь создать сообщение и отправить его на C сервер сокетов.
Из тестов этого C сервера я вижу, как оно сериализует сообщение, например:
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xc8, // 100 200
Итак, первые 4 байта для первого числа (100) и следующие 4 байта для 200. Похоже, мне нужно использовать struct
для кодирования / декодирования этого числа, но у меня есть странная проблема:
# Unpack value to check that this is right format
>>> struct.unpack('>I', b'\x00\x00\x00\x64')
(100,)
# Now try to pack 100
>>> struct.pack('>I', 100)
b'\x00\x00\x00d'
Как вы видите, я могу успешно распаковать значение и получить правильный результат, но я не могу упаковать его обратно. Почему это отличается? Как я могу построить точно такую же структуру?
Вторая проблема почти такая же, но другого типа:
0x04, 0x38, 0x07, 0x80, // 1080 1920
>>> struct.unpack('>h', b'\x04\x38')
(1080,)
>>> struct.pack('>h', 1080)
b'\x048'