大きな数値のための Hex ↔ 10進コンバーター

calldata、ストレージスロット、RPC レスポンスの 0x 値を貼り付けると 10 進で表示され、逆方向の変換もできます。任意精度で、EVM の作業に必要な 32 バイトワードのパディングと符号付き解釈にも対応します。

10 進、0x hex、0b 2 進、0o 8 進、a–f を含む 0x なしの hex、負の数、区切りのアンダースコアやカンマを受け付けます。サイズ制限なし。

ブラウザ内で JavaScript により計算されます。アドレスがアップロードまたは保存されることはありません。

hex→10進コンバーターとは

hex→10進コンバーターは、0xde0b6b3a7640000 のような 16 進文字列を読み取り、同じ数を 10 進(この場合 1,000,000,000,000,000,000、つまり 1018)で返します。逆方向も同様です。ブロックチェーンの作業では数値が最大 256 ビットになるため、コンバーターは任意精度整数を使い、さらに EVM が使う 32 バイトのゼロパディングされたワードと符号付き(int256)解釈も表示する必要があります。

便利な値

10 進Hex意味
1,000,0000xf42401 USDT / USDC(6 桁)
1,000,000,0000x3b9aca00wei 単位の 1 gwei、lamports 単位の 1 SOL
10180xde0b6b3a7640000wei 単位の 1 ether
264 − 10xffffffffffffffffuint64 の最大値
2128 − 10xffff…ffff(f が 32 個)uint128 の最大値
2256 − 10xffff…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 を保存します。

よくある間違い

典型的なワークフロー

  1. ABI デコーダーの calldata 内訳やブロックエクスプローラーのストレージスロットからワードをコピーします。
  2. ここに貼り付けて 10 進の金額として読み取り、トークン小数桁コンバーターまたはEthereum 単位コンバーターでトークンの小数桁で割ります。
  3. 値が 0xffff… のように見える場合は int256 の行を確認してください。負の数か「無限」の allowance かもしれません。

よくある質問

普通の hex コンバーターではだめなのですか?

多くは 64 ビット整数や浮動小数点数を経由して変換するため、10 進で約 16 桁を超える桁を黙って失います。EVM のワードは 256 ビットなので、0xde0b6b3a7640000(1018)のようなトークン残高で既に破綻します。このページは任意精度整数を使います。

bytes32 の行とは何ですか?

値を 32 バイト(hex 64 文字)になるまでゼロで左パディングしたもので、calldata、戻り値データ、ストレージ、イベントデータの中でワードとして現れる形です。

int256 はどう扱われますか?

符号なしの値の最上位ビットが立っている(2255 − 1 より大きい)場合、2 の補数として表す負の数も表示します。負の値を入力した場合は、コントラクトが保存する 32 バイトワードを表示します。

0x なしの hex を受け付けますか?

はい、文字列に a–f の文字が 1 つ以上含まれていれば受け付けます。数字だけの文字列は 10 進として読まれるので、hex として扱うには 0x を付けてください。

hex を手計算で 10 進に変換するには?

各桁に、右から数えた位置(0 から始まる)を指数とする 16 のべき乗を掛けて合計します: 0x2a = 2×16 + 10 = 42。a–f は 10–15 を表します。64 桁の値では計算が面倒になるため、このページがあります。

Ethereum の RPC レスポンスが hex を使うのはなぜですか?

JSON-RPC 仕様は、64 ビット数値しか扱えない JSON パーサーでも 256 ビット値が失われないよう、すべての数量を先頭ゼロなしの 0x 付き hex 文字列でエンコードします。ブロック番号、残高、ガス、nonce はすべてこの形式で届きます。

バイト長から何が分かりますか?

パディングなしでその数値に必要なバイト数です。値が uint8、uint64、uint128 に収まるか、uint が期待される場所にアドレスサイズの値(20 バイト)が渡されていないかを確認するのに役立ちます。