You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:22:25