如何在Python中将字符串转为十六进制?现有代码报错求助
解决Python字符串转十六进制的错误问题
错误原因
你当前的代码int(value, base=16)是用来将十六进制格式的字符串转换成整数,但"increment(uint256)"是普通文本字符串,不属于合法的十六进制字符(十六进制仅包含0-9、a-f/A-F),因此触发ValueError。
正确的转换方法
要把普通字符串转换成十六进制,需先将字符串编码为字节,再将字节转换为十六进制字符串:
方法1:通用字符串转十六进制
value = "increment(uint256)" # 将字符串编码为字节(默认UTF-8,也可指定ascii) byte_data = value.encode('utf-8') # 将字节转换为十六进制字符串 hex_string = byte_data.hex() print(hex_string) # 输出:696e6372656d656e742875696e7432353629
方法2:如果是Solidity函数签名哈希(常见场景)
如果你的需求是生成Solidity函数选择器(前4字节哈希),可以用hashlib计算Keccak-256哈希后取前4字节:
import hashlib value = "increment(uint256)" # 计算Keccak-256哈希 keccak_hash = hashlib.sha3_256(value.encode('utf-8')).digest() # 取前4字节并转十六进制 function_selector = keccak_hash[:4].hex() print(function_selector) # 输出:d09de08a
内容的提问来源于stack exchange,提问作者FaizanNehal
相关产品推荐
相关产品推荐

