大数十六进制 ↔ 十进制换算器

粘贴来自 calldata、存储槽或 RPC 响应的 0x 值即可得到其十进制形式,反之亦可。任意精度,并提供 EVM 开发所需的 32 字节字填充和有符号解读。

支持十进制、0x 十六进制、0b 二进制、0o 八进制、含 a–f 的无前缀十六进制、负数,以及用下划线或逗号作分隔符。大小不限。

由浏览器中的 JavaScript 计算。地址不会被上传或存储。

什么是十六进制转十进制换算器?

十六进制转十进制换算器读取 0xde0b6b3a7640000 这样的 16 进制字符串,返回同一数字的 10 进制形式(此处为 1,000,000,000,000,000,000,即 1018),反之亦然。区块链开发中的数字最大可达 256 位,因此换算器必须使用任意精度整数,并同时显示 32 字节零填充的字以及 EVM 使用的有符号(int256)解读。

常用数值

十进制十六进制含义
1,000,0000xf42401 USDT / USDC(6 位小数)
1,000,000,0000x3b9aca001 gwei 对应的 wei;1 SOL 对应的 lamports
10180xde0b6b3a76400001 ether 对应的 wei
264 − 10xffffffffffffffffuint64 最大值
2128 − 10xffff…ffff(32 个 f)uint128 最大值
2256 − 10xffff…ffff(64 个 f)uint256 最大值,即“无限”授权额度

实例演示

读取某个存储槽返回 0x00000000000000000000000000000000000000000000000000000000000f4240。去掉前导零后剩下 0xf4240 = 15×164 + 4×163 + 2×162 + 4×16 + 0 = 983,040 + 16,384 + 512 + 64 = 1,000,000,即 6 位小数单位下的 1 USDT。由 64 个 f 组成的字作为 uint256 是 2256 − 1,作为 int256 则是 −1,合约就是这样存储负一的。

常见错误

典型工作流

  1. 从 ABI 解码器的 calldata 拆解中,或从区块浏览器的存储槽中复制一个字。
  2. 粘贴到这里,读取其十进制数值;然后用代币小数位换算器或以太坊单位换算器除以代币的小数位数。
  3. 如果值看起来像 0xffff…,请查看 int256 一行:它可能是负数,也可能是“无限”授权额度。

常见问题

为什么不用普通的十六进制换算器?

大多数换算器通过 64 位或浮点数计算,超过约 16 位十进制数字后会悄悄丢失精度。EVM 的字是 256 位,像 0xde0b6b3a7640000(1018)这样的代币余额就已经让它们失灵。本页使用任意精度整数。

bytes32 一行是什么?

该值左侧补零填充到 32 字节(64 个十六进制字符)后的形式,也就是它在 calldata、返回数据、存储和事件数据中作为一个字出现时的样子。

int256 是如何处理的?

如果无符号值的最高位已置位(大于 2255 − 1),本页会同时显示它在二进制补码下代表的负数;对于负数输入,则显示合约将存储的 32 字节字。

接受不带 0x 的十六进制吗?

接受,只要字符串中至少包含一个 a–f 字母。纯数字字符串按十进制解读;加上 0x 可强制按十六进制解读。

如何手动把十六进制转换为十进制?

把每一位乘以 16 的幂(幂次为该位从右数的位置,从 0 开始),再相加:0x2a = 2×16 + 10 = 42。字母 a–f 代表 10–15。对于 64 位十六进制数来说这种运算非常繁琐,本页正是为此而生。

为什么以太坊 RPC 响应使用十六进制?

JSON-RPC 规范把所有数量编码为不带前导零、以 0x 开头的十六进制字符串,这样 256 位的值才能通过只支持 64 位数字的 JSON 解析器。区块号、余额、gas 和 nonce 都以这种形式返回。

字节长度能告诉我什么?

该数字在不填充的情况下需要多少字节。可用来检查一个值是否能放入 uint8、uint64、uint128,以及在期望 uint 的地方是否误传了地址大小(20 字节)的值。