Как преобразовать строку целых чисел типа unsigned char в int в python

0

У меня есть соединение сокета с клиентом C++, подключающимся к серверу python. Клиент размещает ключ Diffie-Hellman в сообщении, но когда я его просматриваю, он искажается из-за отсутствия символов на стороне клиента.

Я смог сделать необработанный дамп с помощью функции repr (key) и получил следующее:

\'V\x99\xf3\x0c\x1b\xc7]\x1f\xe4\nQ5$*\x88\x88Yg\xff{\xea\xe9e\xd8\xb32oD\xff
\xcfV\x84\x90xv,\x9dw\x1e(\x12\xfe\x9a\xb4,\x96%\xad;S\xb6\xa3\xf9\xb69\xfa\xec
\x1dl\x97\x1d\xd64/'

Длина ключа должна быть 64. Как мне перейти на преобразование этой строки в 64 ints, что является фактическим ключом?

Теги:
sockets

1 ответ

1
Лучший ответ

Вы можете использовать хороший struct модуль для его распаковки. Это даст вам набор из 64 маленьких целых чисел (B означает "unsigned char"):

>>> print repr(data)
'V\x99\xf3\x0c\x1b\xc7]\x1f\xe4\nQ5$*\x88\x88Yg\xff{\xea\xe9e\xd8\xb32oD\xff\xcfV\x84\x90xv,\x9dw\x1e(\x12\xfe\x9a\xb4,\x96%\xad
;S\xb6\xa3\xf9\xb69\xfa\xec\x1dl\x97\x1d\xd64/'
>>> len(data)
64
>>> struct.unpack("64B", data)
(86, 153, 243, 12, 27, 199, 93, 31, 228, 10, 81, 53, 36, 42, 136, 136, 89, 103, 255, 123, 234, 233, 101, 216, 179, 50, 111, 68,
255, 207, 86, 132, 144, 120, 118, 44, 157, 119, 30, 40, 18, 254, 154, 180, 44, 150, 37, 173, 59, 83, 182, 163, 249, 182, 57, 250
, 236, 29, 108, 151, 29, 214, 52, 47)
  • 0
    Спасибо! Каким-то образом не нашел пакет struct при поиске в Google работы с двоичными данными в python.
  • 0
    Пожалуйста. Я обнимаю struct , это круто.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню