Python int в байтах (упаковать / распаковать) - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать сообщение и отправить его на 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'
...