如何使用ctypes将字节转换为浮点?

2024-09-29 23:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把b'\xd8\x0fI@'转换成c_float。我正在寻找类似于:

>>> c_float(bytes=b'\xd8\x0fI@').value
3.1415

Tags: bytesvaluefloatxd8x0fi
2条回答

使用struct库中的unpack

import ctypes, struct

ctypes.c_float(struct.unpack('<f', b'\xd8\x0fI@')[0]) # c_float(3.141592025756836)

使用工会:

import ctypes as ct

class Convert(ct.Union):
    _fields_ = (("my_bytes", ct.c_char * ct.sizeof(ct.c_float)),
                ("my_float", ct.c_float))

data_to_convert = b'\xd8\x0fI@'
conv = Convert()
conv.my_bytes = data_to_convert
print(conv.my_float)  # prints 3.141592025756836

在进行转换之前,您可能还需要检查长度。如果您尝试使用太长的字节序列,如果没有这样的检查,您将得到一个ValueError,但是如果您使用太短的字节序列,它将不会提醒您。(类型检查将自动为您完成。)

if len(data_to_convert) != len(conv.my_bytes):
    raise ValueError

相关问题 更多 >

    热门问题