You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析加密代币十六进制: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:22:23