Конвертер hex ↔ десятичные для больших чисел

Вставьте значение 0x из calldata, слота хранилища или ответа RPC и получите его десятичную форму, либо наоборот. Произвольная точность, с дополнением до 32-байтного слова и знаковой интерпретацией, которые нужны для работы с EVM.

Принимает десятичные, 0x hex, 0b двоичные, 0o восьмеричные, hex без префикса с буквами a–f, отрицательные числа, а также подчёркивания или запятые как разделители. Произвольный размер.

Вычисляется в вашем браузере на JavaScript. Адреса никогда не загружаются на сервер и не сохраняются.

Что такое конвертер hex в десятичные?

Конвертер hex в десятичные читает строку в шестнадцатеричной системе, например 0xde0b6b3a7640000, и возвращает то же число в десятичной (здесь 1 000 000 000 000 000 000, то есть 1018), и наоборот. В блокчейн-задачах числа достигают 256 бит, поэтому конвертер должен использовать целые числа произвольной точности, а также показывать 32-байтное слово с нулевым дополнением и знаковое (int256) прочтение, которые использует EVM.

Полезные значения

ДесятичноеHexЗначение
1 000 0000xf42401 USDT / USDC (6 знаков)
1 000 000 0000x3b9aca001 gwei в wei; 1 SOL в lamports
10180xde0b6b3a76400001 ether в wei
264 − 10xffffffffffffffffмаксимум uint64
2128 − 10xffff…ffff (32 f)максимум uint128
2256 − 10xffff…ffff (64 f)максимум uint256, «безлимитная» сумма approve

Наглядный пример

Чтение слота хранилища возвращает 0x00000000000000000000000000000000000000000000000000000000000f4240. Убрав ведущие нули, получаем 0xf4240 = 15×164 + 4×163 + 2×162 + 4×16 + 0 = 983 040 + 16 384 + 512 + 64 = 1 000 000, то есть 1 USDT в единицах с 6 знаками. Слово из 64 символов f — это 2256 − 1 как uint256, но −1 как int256; именно так контракт хранит минус один.

Типичные ошибки

Типичный сценарий

  1. Скопируйте слово из разбора calldata в ABI-декодере или из слота хранилища в обозревателе блоков.
  2. Вставьте его сюда, чтобы прочитать как десятичную сумму; затем разделите на decimals токена в конвертере decimals токенов или в конвертере единиц Ethereum.
  3. Если значение выглядит как 0xffff…, посмотрите строку int256: это может быть отрицательное число или «бесконечный» allowance.

Часто задаваемые вопросы

Почему не использовать обычный hex-конвертер?

Большинство из них работают через 64-битные числа или числа с плавающей точкой и молча теряют разряды примерно после 16 десятичных знаков. Слова EVM — 256-битные, поэтому уже баланс токена вроде 0xde0b6b3a7640000 (1018) их ломает. Эта страница использует целые числа произвольной точности.

Что такое строка bytes32?

Значение, дополненное нулями слева до 32 байт (64 hex-символа) — именно так оно выглядит как слово в calldata, возвращаемых данных, хранилище и данных событий.

Как обрабатывается int256?

Если у беззнакового значения установлен старший бит (оно больше 2255 − 1), страница также показывает отрицательное число, которое оно представляет в дополнительном коде; для отрицательного ввода показывается 32-байтное слово, которое сохранил бы контракт.

Принимается ли hex без 0x?

Да, если строка содержит хотя бы одну букву a–f. Строка из одних цифр читается как десятичная; добавьте 0x, чтобы принудительно трактовать её как hex.

Как перевести hex в десятичное число вручную?

Умножьте каждую цифру на 16 в степени её позиции справа, начиная с 0, и сложите: 0x2a = 2×16 + 10 = 42. Буквы a–f означают 10–15. Для 64-значных значений арифметика утомительна — для этого и нужна эта страница.

Почему ответы Ethereum RPC используют hex?

Спецификация JSON-RPC кодирует все величины как hex-строки с префиксом 0x без ведущих нулей, чтобы 256-битные значения переживали JSON-парсеры, поддерживающие только 64-битные числа. Номера блоков, балансы, gas и nonce приходят именно так.

О чём говорит длина в байтах?

Сколько байт нужно числу без дополнения. Полезно, чтобы проверить, помещается ли значение в uint8, uint64, uint128, и не передано ли значение размером с адрес (20 байт) там, где ожидался uint.