为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2023-03-01 15:26:40
我想转换b'\xd8\x0fI@'成一个c_float. 我正在寻找类似的东西:>>> c_float(bytes=b'\xd8\x0fI@').value 3.1415
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

使用联合:


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


查看完整回答
反对 回复 2023-03-01
?
暮色呼如

TA贡献1853条经验 获得超9个赞

使用结构库中的unpack

import ctypes, struct

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


查看完整回答
反对 回复 2023-03-01
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信