Как преобразовать шестнадцатеричную строку в распакованный номер формата IEEE 754:-

#python #ieee-754

#python #ieee-754

Вопрос:

использование Python 2.7.3: как преобразовать шестнадцатеричную строку в распакованный номер формата IEEE 754:-

У меня есть строка шестнадцатеричных данных в этой форме:

 data = '38 1A A3 44'
  

Я хотел бы преобразовать это в число с плавающей запятой, используя struct.unpack:

 fdata = struct.unpack('<f','x38xA1xA3x44')  # fdata=1304.8193359375
  

Есть ли решение Pythonic или мне нужно как-то заменить escape-последовательность для каждого пробела в данных?

Ответ №1:

Сначала преобразуйте шестнадцатеричные кодовые точки в байтовую строку; binascii.unhexlify() может сделать это за вас, при условии, что вы удалите пробелы:

 import binascii
import struct

fdata = struct.unpack('<f', binascii.unhexlify(data.replace(' ', '')))[0]
  

ДЕМОНСТРАЦИЯ:

 >>> import binascii
>>> import struct
>>> data = '38 1A A3 44'
>>> struct.unpack('<f', binascii.unhexlify(data.replace(' ', '')))
(1304.8193359375,)
  

Комментарии:

1. Я придумал альтернативный способ преобразования из шестнадцатеричного: ''.join(chr(int(x, 16)) for x in data.split()) . Ваш лучше.