Python中从文件读取椭圆曲线点坐标实现点加法的问题求助
解决椭圆曲线点加法中的坐标读取与类型转换问题
你的问题核心在于两点:
- 错误地将
B赋值为字符串字面量'data',而非读取到的坐标数据 - 直接对包含括号、逗号的完整字符串执行
int()转换,忽略了坐标的十六进制格式与字符串结构
以下是修正方案:
1. 解析坐标字符串
首先处理从文件读取的data字符串,去除首尾的括号,再按逗号分割得到两个十六进制坐标值:
# 读取文件内容 with open('B-coordinates.txt', 'r') as f: data = f.read().strip() # 去除首尾括号,分割成两个坐标字符串 # 比如将"(0xabc,0xdef)"变成["0xabc", "0xdef"] bx_str, by_str = data.strip('()').split(',')
2. 转换为整数并构造点元组
用int(hex_str, 16)将十六进制字符串转为整数,再构造和A格式一致的元组:
Bx = int(bx_str.strip(), 16) By = int(by_str.strip(), 16) B = (Bx, By)
完整修正代码
Ax = 0xbc46aa75e5948daa08123b36f2080d234aac274bf62fca8f9eb0aadf829c744a Ay = 0xe5f28c3a044b1cac54a9b4bf719f02dfae93a0bae73832301e786104f43255a5 A = (Ax, Ay) # 读取并解析B点坐标 with open('B-coordinates.txt', 'r') as f: data = f.read().strip() # 解析坐标字符串 bx_str, by_str = data.strip('()').split(',') Bx = int(bx_str.strip(), 16) By = int(by_str.strip(), 16) B = (Bx, By) # 现在可以正常执行点加法 # add(A, B) # 假设你的add函数已经实现了椭圆曲线点加法逻辑
关键说明
- 使用
with语句读取文件是Python的最佳实践,会自动关闭文件 strip('()')用于去除字符串首尾的括号,split(',')将字符串分割为两个坐标部分int(hex_str, 16)明确指定按十六进制解析字符串,支持带0x前缀的格式- 修正后的
B是和A一致的整数元组,符合椭圆曲线点加法函数的参数要求
内容的提问来源于stack exchange,提问作者thereisnoalternativeDEAF
相关产品推荐
相关产品推荐

