浮点指针到十六进制

时间:2018-03-30 11:12:11

标签: python floating-point hex

我用来转换hexadecimals > float pointers的代码:

from ctypes import *

def convert(s):
    i = int(s, 16)                   # convert from hex to a Python int
    cp = pointer(c_int(i))           # make this into a c integer
    fp = cast(cp, POINTER(c_float))  # cast the int pointer to a float pointer
    return fp.contents.value         # dereference the pointer, get the float

print convert("41973333")    # returns 1.88999996185302734375E1

print convert("41995C29")    # returns 1.91700000762939453125E1

print convert("470FC614")    # returns 3.6806078125E4

但是我不确定如何扭转这种影响,所以说。

我试图从float pointer > hexadecimal开始,而不是hexadecimal > float pointer

2 个答案:

答案 0 :(得分:1)

你做同样的事情,但倒退:

  1. 将float转换为int
  2. 将int转换为十六进制
  3. 代码:

    def float_to_hex(x):
        fp = pointer(c_float(x))
        ip = cast(fp, POINTER(c_int))
        x = ip.contents.value
        return '{:02X}'.format(x)
    

    输出:

    >>> float_to_hex(1.88999996185302734375E1)
    '41973333'
    >>> float_to_hex(1.91700000762939453125E1)
    '41995C29'
    >>> float_to_hex(3.6806078125E4)
    '470FC614'
    

答案 1 :(得分:0)

您可以使用struct将十六进制转换为float

import struct

struct.unpack('!f', '41995C29'.decode('hex'))[0]

会给:

19.170000076293945