Создание только одного байта с помощью struct.pack - PullRequest
0 голосов
/ 26 сентября 2019

Я написал скрипт на Python, который использует struct.pack() для преобразования десятичного числа в шестнадцатеричную строку.

Например:

struct.pack('>h', 1024) => '\x04\x00'

Проблема заключается в том, что при вводе числаниже 256 он по-прежнему создает строку, состоящую из двух байтов.

Например:

struct.pack('>h', 20) => '\x00\x14'

Это проблема для меня, поскольку для числа ниже 256 я могу работать только с одним байтом,Это означает, что для десятичного числа 20 я бы хотел сгенерировать вывод '\ x14'.

Есть ли способ заставить struct.pack() сделать это или мне нужна другая функция?

1 Ответ

0 голосов
/ 26 сентября 2019

'>h' обозначает двухбайтовое короткое целое число с прямым порядком байтов.
Если вы хотите получить однозначное целое число без знака, вы должны использовать '>B':

struct.pack('>B', 20) => '\x14'

Вы можете проверить форматсимвол в официальной документации , но чаще всего используются:

  • c: символ, строка длиной 1, 1 байт
  • b: знаковый символ, целое число, 1 байт
  • B: беззнаковый символ, целое число, 1 байт
  • h: короткий, целое число, 2 байта
  • H: unisgned short, integer, 2 байта
  • i: int, integer, 4 байта
  • I: unsigned int, integer, 4 байта
  • f: float, float, 4 байта
  • d: double, float, 8 байтов

Порядковый номер ('>') определяет позиции байтов, но для 1 байта нетважно.

...