python - 将python浮点数转换为字节
问题描述
我想将 Python 浮点数转换为字节数组,将其编码为 32 位 little-endian IEEE 浮点数,以便将其写入二进制文件。
在 Python 3 中实现这一点的现代 Pythonic 方式是什么?对于整数我可以做my_int.to_bytes(4,'little')
,但没有to_bytes
浮点数的方法。
如果我可以一次性为 numpy 数组中的每个浮点数执行此操作(使用 dtype numpy.float32),那就更好了。但请注意,我需要将其作为字节数组获取,而不是立即将数组写入文件。
有一些类似的问题,但它们似乎主要是关于获取十六进制数字,而不是写入二进制文件。
解决方案
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()
推荐阅读
- tomcat - 百胜安装tomcat8 CentOS 6
- php - 关注点分离 - 使用服务控制 2 个依赖实体?
- amazon-dynamodb - 在 DynamoDB GSI 的投影中使用嵌套字段
- regex - Select-String:仅当字符串前面没有特定字符时才匹配该字符串
- angular - 如何在另一个表单构建器上的对象上设置值 - 打字稿
- java - 如何将进入/退出 Java 操作添加到自定义流程图块
- python - Python - 连接两个相同的列并保持其他不变
- android - 有没有办法在 ExoPlayer 中以全屏(横向)模式播放视频
- excel - Excel VBA过滤器循环
- c++ - 如何获取向量的每个第 N 个元素的“地址”