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

开发Python版.bruh转换器:实现Rust的to_ne_bytes()及反向操作

在Python中重现Rust的to_ne_bytes()功能及反向操作

Rust的to_ne_bytes()方法用于将整数类型转换为本机原生字节序(当前系统的大端/小端)的固定长度字节数组。Python中可以通过struct模块完全实现等价功能,同时支持反向的字节转数值操作。

核心实现逻辑

Python的struct模块支持指定字节序,其中=前缀代表本机原生字节序,正好对应Rust中to_ne_bytes()的行为。不同整数类型对应的格式符如下:

Rust类型Python struct格式符(带=前缀)字节长度
u8=B1
i8=b1
u16=H2
i16=h2
u32=I4
i32=i4
u64=Q8
i64=q8

实现to_ne_bytes()等价功能

特定类型示例(以u32为例)

import struct

# 对应Rust的u32::to_ne_bytes()
def to_ne_u32(num: int) -> bytes:
    return struct.pack('=I', num)

# 测试:转换数值为本机字节序字节数组
num = 0x12345678
bytes_data = to_ne_u32(num)
# 输出结果取决于系统字节序:小端系统为b'\x78\x56\x34\x12',大端为b'\x12\x34\x56\x78'

通用型实现(支持所有整数类型)

import struct

def to_ne_bytes(num: int, fmt: str) -> bytes:
    """
    等价于Rust的to_ne_bytes()
    :param num: 要转换的整数
    :param fmt: 无字节序前缀的struct格式符,如'I'对应u32,'q'对应i64
    """
    return struct.pack(f'={fmt}', num)

# 示例:转换i64类型数值
num_i64 = -123456789012345
bytes_i64 = to_ne_bytes(num_i64, 'q')

反向操作:字节数组转整数(对应Rust的from_ne_bytes())

特定类型示例(以u32为例)

# 对应Rust的u32::from_ne_bytes()
def from_ne_u32(bytes_data: bytes) -> int:
    return struct.unpack('=I', bytes_data)[0]

# 测试:将字节数组转回数值
recovered_num = from_ne_u32(bytes_data)
print(recovered_num)  # 输出0x12345678

通用型反向实现

def from_ne_bytes(bytes_data: bytes, fmt: str) -> int:
    """
    等价于Rust的from_ne_bytes()
    :param bytes_data: 要转换的字节数组
    :param fmt: 无字节序前缀的struct格式符,需与转换时的格式符一致
    """
    return struct.unpack(f'={fmt}', bytes_data)[0]

# 示例:将i64字节数组转回数值
recovered_i64 = from_ne_bytes(bytes_i64, 'q')
print(recovered_i64)  # 输出-123456789012345

注意事项

  • 确保传入的整数符合对应类型的取值范围,比如u8只能接收0-255之间的数值,超出范围会触发struct.error
  • 反向转换时,字节数组的长度必须与格式符对应的字节长度一致,否则会报错
  • 本机字节序由运行代码的系统决定,跨系统传输时建议显式指定大端(>)或小端(<)字节序,而非依赖原生字节序

内容的提问来源于stack exchange,提问作者Tycho10101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:27:46