2010-05-25 3 views
0

Я пытаюсь преобразовать числа от десятичной до шестнадцатеричной. Как преобразовать значения float в hex или char в Python 2.4.3?Как преобразовать base 10 float в hex в Python 2.4?

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

+0

Связанные: http://stackoverflow.com/questions/1592158/python-convert-hex-to-float – miku

+2

Вы хотите двоичное представление IEEE float в hex, вы просто хотите, чтобы целая часть в шестнадцатеричном формате, или вы хотите, чтобы все это было в шестнадцатеричном формате? – Gabe

+1

Привет, что вы используете для этого?Вы пытаетесь сохранить десятичную точность, если вы печатаете/читаете номер? Вы можете посмотреть на десятичную плавающую точку для этого, это намного более портативно, и вы не получите злобной толпы у ваших ворот с факелами и вилами. –

ответ

0

Вы не можете преобразовать поплавок непосредственно в шестнадцатеричный. Сначала вам нужно преобразовать в int.

hex(int(value)) 

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

hex(int(round(value))) 
+0

Да, понятно, но как я могу это сделать; Я преобразовал hex в десятичный. Однако моя проблема состоит в том, чтобы преобразовать эти десятичные числа с плавающей точкой в ​​hex в python. Например: Шестнадцатеричное значение для 0,26 равно \ x30 \ x32 \ x36 \ x36, как это можно сделать в Python? – user349845

+0

Что значит, преобразовал его в десятичный? Можете ли вы привести пример того, что вы сделали? Представление десятичных чисел может быть сделано несколькими путями, поэтому было бы полезно, если бы вы могли описать его в деталях (или предоставить некоторый код). –

1

От питон 2.6.5 docs в шестнадцатеричном (х) определение:

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

+0

не могли бы вы привести пример его использования? Я пытаюсь преобразовать этот 0.554 в hex с помощью float.hex (value)? и как я могу записать его как (\ x30 \ x30 \ x35 \ x35)? – user349845

+0

В этом случае вы могли бы написать его как 0.554.hex(). Но результат был бы совершенно иным, чем то, что вы ожидаете. см. http://docs.python.org/library/stdtypes.html#float.hex –

+0

Я понимаю, что то, что фактически хочет OP, это значения Hex для кодов ASCII чисел. Я не редактирую свой ответ, поскольку Джереми уже дал решение ниже. В любом случае подсказка, заданная jordan 0.554 == '\ x30 \ x30 \ x35 \ x35', также была неправильной, поскольку десятичная точка не была указана и фактически '\ x30 \ x30 \ x35 \ x35' == '0055'. – joaquin

1

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

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

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

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

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

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

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

>>> [ 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

Это замечательно, спасибо за это. Я пакет данных, но мне интересно, могу ли я удалить \ x2E из \ x30 \ x2E \ x35 \ x35 \ x34 – user349845

+0

Я получил его, но если бы я попытался найти для 5, я не могу представить его в этой форме \ x30 \ x30 \ x30 \ x35 – user349845

+0

@jordan - я отредактировал свой ответ на адрес padding –