hex→10進コンバーターとは
hex→10進コンバーターは、0xde0b6b3a7640000 のような 16 進文字列を読み取り、同じ数を 10 進(この場合 1,000,000,000,000,000,000、つまり 1018)で返します。逆方向も同様です。ブロックチェーンの作業では数値が最大 256 ビットになるため、コンバーターは任意精度整数を使い、さらに EVM が使う 32 バイトのゼロパディングされたワードと符号付き(int256)解釈も表示する必要があります。
便利な値
| 10 進 | Hex | 意味 |
|---|---|---|
| 1,000,000 | 0xf4240 | 1 USDT / USDC(6 桁) |
| 1,000,000,000 | 0x3b9aca00 | wei 単位の 1 gwei、lamports 単位の 1 SOL |
| 1018 | 0xde0b6b3a7640000 | wei 単位の 1 ether |
| 264 − 1 | 0xffffffffffffffff | uint64 の最大値 |
| 2128 − 1 | 0xffff…ffff(f が 32 個) | uint128 の最大値 |
| 2256 − 1 | 0xffff…ffff(f が 64 個) | uint256 の最大値、「無制限」approve の金額 |
具体例
ストレージスロットの読み取りが 0x00000000000000000000000000000000000000000000000000000000000f4240 を返したとします。先頭のゼロを取り除くと 0xf4240 = 15×164 + 4×163 + 2×162 + 4×16 + 0 = 983,040 + 16,384 + 512 + 64 = 1,000,000 で、6 桁単位の 1 USDT です。f が 64 個並んだワードは uint256 としては 2256 − 1 ですが int256 としては −1 で、コントラクトはこの形でマイナス 1 を保存します。
よくある間違い
- 10 進文字列を hex として読む。
1000000は 10 進では 100 万ですが、hex では 16,777,216 です。このページは数字だけの入力を、0xを付けない限り 10 進として扱います。 - スプレッドシートで精度を失う。 253(約 9 × 1015)を超える値は倍精度浮動小数点数で丸められます。wei や 18 桁のトークン量はこれを超えます。
- 符号を忘れる。 先頭の hex 桁が 8 以上のワードは最上位ビットが立っており、巨大な uint256 ではなく負の int256 を表している可能性があります。
- 奇数桁の hex。
0xabcは数値としては有効ですがバイト単位で割り切れません。先頭のニブルをパディングすると 2 バイトを占めます。
典型的なワークフロー
- ABI デコーダーの calldata 内訳やブロックエクスプローラーのストレージスロットからワードをコピーします。
- ここに貼り付けて 10 進の金額として読み取り、トークン小数桁コンバーターまたはEthereum 単位コンバーターでトークンの小数桁で割ります。
- 値が 0xffff… のように見える場合は int256 の行を確認してください。負の数か「無限」の allowance かもしれません。