首页 > 解决方案 > 将python浮点数转换为字节

问题描述

我想将 Python 浮点数转换为字节数组,将其编码为 32 位 little-endian IEEE 浮点数,以便将其写入二进制文件。

在 Python 3 中实现这一点的现代 Pythonic 方式是什么?对于整数我可以做my_int.to_bytes(4,'little'),但没有to_bytes浮点数的方法。

如果我可以一次性为 numpy 数组中的每个浮点数执行此操作(使用 dtype numpy.float32),那就更好了。但请注意,我需要将其作为字节数组获取,而不是立即将数组写入文件。

有一些类似的问题,但它们似乎主要是关于获取十六进制数字,而不是写入二进制文件。

标签: pythonnumpybinary-data

解决方案


NumPy 数组带有一种tobytes方法,可以为您提供原始数据字节的转储:

arr.tobytes()

您可以指定一个order参数以对多维数组使用 C 顺序(行主要)或 F 顺序(列主要)。

由于您想将字节转储到文件中,您可能还对tofile直接将字节转储到文件的方法感兴趣:

arr.tofile(your_file)

tofile总是使用 C 阶。

如果需要更改字节顺序,可以使用该byteswap方法。(newbyteorder具有更方便的签名,但不会更改底层字节,因此不会影响tobytes。)

import sys
if sys.byteorder=='big':
    arr = arr.byteswap()
data_bytes = arr.tobytes()

推荐阅读