如何用Python实现Golang的Little Endian Uint64二进制编码逻辑?
Python实现对应Golang的随机uint64生成及小端字节转换
一、还原Golang原代码逻辑
Golang代码核心是生成16字节随机数据,取前8字节按小端序解析为uint64。Python可以通过secrets(安全随机场景推荐)或os.urandom生成随机字节,搭配struct模块完成类型转换:
import secrets import struct # 生成16字节随机数组 ar_bytes = secrets.token_bytes(16) # 取前8字节,按小端序解析为uint64 a0 = struct.unpack('<Q', ar_bytes[:8])[0]
secrets.token_bytes(16)对应Golang的rand.Read(arBytes),生成安全的加密级随机字节流struct.unpack('<Q', ...)中,<代表小端序,Q对应无符号64位整数(即Golang的uint64),unpack返回元组,取第一个元素即为目标数值
若仅用于测试场景,也可替换为random模块,但生产环境优先使用secrets或os.urandom保证随机性安全。
二、从uint64生成小端字节数组
你提到的将uint64转为小端字节数组的需求,同样用struct模块的pack方法实现:
import struct # 假设已有目标uint64数值 a0 = 1234567890123456789 # 按小端序打包为8字节数组 little_endian_bytes = struct.pack('<Q', a0)
struct.pack('<Q', a0)会把uint64数值转换成8字节的小端字节数组,效果和Golang的binary.LittleEndian.PutUint64完全一致
补充说明
struct是Python处理字节与基础数据类型转换的标准库,能覆盖encoding/binary的绝大多数常用功能- 若需要处理16字节数组的后8字节,直接切片
ar_bytes[8:16]后用同样的struct.unpack('<Q', ...)解析即可
内容的提问来源于stack exchange,提问作者isabella
相关产品推荐
相关产品推荐

