解析加密代币十六进制:JS的parseInt可用,C#转换报错求解决
问题原因及解决方法
核心问题分析
- 类型范围完全不匹配:你使用的
Int16是16位有符号整数,最大值仅为32767,但要解析的十六进制字符串对应数值是10^18量级的超大数,远远超出了Int16的承载范围,这是报错的主要原因。而JavaScript的parseInt会自动将大数值转为双精度浮点数,没有强类型限制,所以能正常执行。 - C#解析规则差异:
Int16.Parse默认只接受纯数字字符串,带0x前缀的十六进制格式不在默认解析规则内,直接会触发格式错误。
正确的解析方式
加密代币的数值通常是超大整数,建议使用BigInteger(需引用System.Numerics命名空间)来处理,它支持任意大小的整数:
using System.Numerics; string tokenHex = "0x0000000000000000000000000000000000000000000000056bc75e2d63100000"; // 先移除0x前缀,再指定十六进制样式解析 BigInteger tokenValue = BigInteger.Parse(tokenHex.Replace("0x", ""), System.Globalization.NumberStyles.HexNumber);
注:.NET Core 3.0及以上版本,可直接用
NumberStyles.HexNumber解析带0x前缀的字符串,无需手动移除前缀。
如果确认数值在decimal范围内,也可以用以下方式:
decimal tokenValue = decimal.Parse(tokenHex.Replace("0x", ""), System.Globalization.NumberStyles.HexNumber);
内容的提问来源于stack exchange,提问作者user3776241
相关产品推荐
相关产品推荐

