如何在Python中获取fp16、fp32、bf16、int8等的内存精确表示
实现获取数字内存精确存储形式的Python函数
实现思路
借助numpy库处理多类型数值的内存表示,它原生支持包括float16在内的丰富数据类型,可直接提取内存中的原始字节,再转换为二进制字符串,完全匹配你需要的IEEE754格式转换功能。
代码实现
import numpy as np def memory_repr(num, dtype_str, byteorder='big'): # 映射类型字符串到numpy对应数据类型 dtype_map = { 'int8': np.int8, 'uint8': np.uint8, 'int16': np.int16, 'uint16': np.uint16, 'int32': np.int32, 'uint32': np.uint32, 'int64': np.int64, 'uint64': np.uint64, 'float16': np.float16, 'float32': np.float32, 'float64': np.float64 } if dtype_str not in dtype_map: raise ValueError(f"不支持的数据类型:{dtype_str}") # 将输入数字转换为指定类型的numpy数组 arr = np.array([num], dtype=dtype_map[dtype_str]) # 获取指定字节序的原始字节数据 bytes_data = arr.tobytes(byteorder) # 逐字节转换为8位二进制字符串并拼接 binary_str = ''.join(f'{byte:08b}' for byte in bytes_data) return binary_str
使用示例
# int8类型的3,输出内存二进制表示 print(memory_repr(3, 'int8')) # 输出: 00000011 # float32类型的3,输出IEEE754标准的二进制表示(与你给出的示例一致) print(memory_repr(3, 'float32')) # 输出: 01000000010000000000000000000000 # float16类型的3,输出16位IEEE754表示 print(memory_repr(3, 'float16')) # 输出: 0100000001000000
说明
- 支持所有常见的带符号/无符号整数、浮点类型,覆盖绝大多数场景需求
byteorder参数指定字节序,默认big(大端),与标准IEEE754转换器输出一致;若需小端格式,传入byteorder='little'即可- 若不想依赖numpy,也可通过
struct模块实现,但处理float16需要额外的类型转换逻辑,numpy方案更简洁直接
内容的提问来源于stack exchange,提问作者Turtle
相关产品推荐
相关产品推荐

