Как мне преобразовать число с плавающей запятой 10 в гекс в Python 2.4? - PullRequest
0 голосов
/ 25 мая 2010

Я пытаюсь преобразовать числа из десятичного в шестнадцатеричное. Как мне преобразовать значения float в шестнадцатеричные или символьные в Python 2.4.3?

Затем я хотел бы иметь возможность напечатать его как ("\ xa5 \ x (новый шестнадцатеричный номер здесь)"). Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 25 мая 2010

Из Python 2.6.5 Документы в шестнадцатеричном (x) определении:

Чтобы получить шестнадцатеричное строковое представление для числа с плавающей запятой, используйте метод float.hex ().

1 голос
/ 25 мая 2010

Судя по этому комментарию:

Не могли бы вы дать пример его использования? я пытаюсь преобразовать это 0,554 в гекс с помощью float.hex (значение)? и как я могу написать это как (\ x30 \ x30 \ x35 \ x35)? - Иордания2010 1 час назад

что вам действительно нужно, так это шестнадцатеричное представление кодов ASCII этих числовых символов, а не фактическое число с плавающей точкой, представленное в шестнадцатеричном виде.

"5" = 53 (основание 10) = 0x35 (основание 16)

Вы можете использовать ord (), чтобы получить код ASCII для каждого символа, например так:

>>> [ ord(char) for char in "0.554" ]
[48, 46, 53, 53, 52]

Хотите ли вы удобочитаемое представление? hex () даст вам один, но он не в том формате, который вы просили:

>>> [ hex(ord(char)) for char in "0.554" ]
['0x30', '0x2e', '0x35', '0x35', '0x34']
#   0      .        5       5       4

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

res = "".join( [ "\\x%02X" % ord(char) for char in "0.554" ] )
>>> print res
\x30\x2E\x35\x35\x34

Но если вы хотите сериализовать данные, рассмотрите возможность использования модуля struct для упаковки данных в буферы.

отредактировано для ответа на второй комментарий jordan2010

Вот быстрое дополнение, чтобы дополнить число начальными нулями.

>>> padded_integer_str = "%04d" % 5
>>> print padded_integer_str
0005
>>> res = "".join( [ "\\x%02X" % ord(char) for char in padded_integer_str] )
>>> print res
\x30\x30\x30\x35

См. http://docs.python.org/library/stdtypes.html#string-formatting для объяснения о форматировщиках строк

0 голосов
/ 25 мая 2010

Вы не можете конвертировать число с плавающей точкой прямо в гекс. Сначала вам нужно конвертировать в int.

hex(int(value))

Обратите внимание, что int всегда округляется, поэтому вы можете явно выполнить округление перед преобразованием в int:

hex(int(round(value)))
...