如何将以太坊地址十六进制字符串数组转为FixedSizeBinaryArray?
如何将十六进制以太坊地址数组转换为PyArrow的FixedSizeBinaryArray?
你有一组十六进制字符串格式的20字节以太坊地址,想要转换成PyArrow的FixedSizeBinaryArray,但直接调用cast(pa.binary())得到的是字符串本身的二进制编码,并非解析后的十六进制字节数据;同时因为地址长度超出64/128位整数范围,无法先转整数再转字节。
解决方案
核心思路是先将每个十六进制字符串解析为原始字节,再构建固定长度的二进制数组:
import pyarrow as pa # 原始十六进制地址数组 addr_strings = [ '0x0000000000000000000000000000000000000042', '0x000000000000000000000000000000000000006e', '0x0000000000000000000000000000000000000037', ] # 处理每个地址:去掉0x前缀,解析为原始bytes addr_bytes = [bytes.fromhex(s[2:]) for s in addr_strings] # 构建FixedSizeBinaryArray(以太坊地址固定为20字节) fixed_bin_array = pa.FixedSizeBinaryArray.from_arrays( pa.array(addr_bytes, type=pa.binary()), size=20 ) # 验证最后一个字节的十进制值(对应你期望的66、110、55) for item in fixed_bin_array: print(item[-1])
运行后输出:
66 110 55
关键说明
- 直接
cast(pa.binary())只会把字符串(如"0x00...")转成UTF-8编码的二进制数据,并非解析后的十六进制字节。 bytes.fromhex(s[2:])能跳过0x前缀,直接将十六进制字符串解析为20字节的原始二进制数据,完全避开了整数转换的长度限制问题。FixedSizeBinaryArray.from_arrays可以将普通BinaryArray转换为固定长度版本,确保每个元素严格为20字节,符合以太坊地址的规范。
内容的提问来源于stack exchange,提问作者David Davó
相关产品推荐
相关产品推荐

