Что такое конвертер hex в десятичные?
Конвертер hex в десятичные читает строку в шестнадцатеричной системе, например 0xde0b6b3a7640000, и возвращает то же число в десятичной (здесь 1 000 000 000 000 000 000, то есть 1018), и наоборот. В блокчейн-задачах числа достигают 256 бит, поэтому конвертер должен использовать целые числа произвольной точности, а также показывать 32-байтное слово с нулевым дополнением и знаковое (int256) прочтение, которые использует EVM.
Полезные значения
| Десятичное | Hex | Значение |
|---|---|---|
| 1 000 000 | 0xf4240 | 1 USDT / USDC (6 знаков) |
| 1 000 000 000 | 0x3b9aca00 | 1 gwei в wei; 1 SOL в lamports |
| 1018 | 0xde0b6b3a7640000 | 1 ether в wei |
| 264 − 1 | 0xffffffffffffffff | максимум uint64 |
| 2128 − 1 | 0xffff…ffff (32 f) | максимум uint128 |
| 2256 − 1 | 0xffff…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; именно так контракт хранит минус один.
Типичные ошибки
- Десятичная строка прочитана как hex.
1000000— это миллион в десятичной системе, но 16 777 216 в hex. Страница трактует ввод из одних цифр как десятичный, если не добавить0x. - Потеря точности в таблице. Значения выше 253 (около 9 × 1015) округляются числами с плавающей точкой двойной точности; wei и суммы токенов с 18 знаками превышают этот предел.
- Забытый знак. У слова, первая hex-цифра которого 8 или больше, установлен старший бит, и оно может означать отрицательный int256, а не огромный uint256.
- Hex нечётной длины.
0xabc— допустимое число, но не целое число байт; после дополнения старшего полубайта оно занимает 2 байта.
Типичный сценарий
- Скопируйте слово из разбора calldata в ABI-декодере или из слота хранилища в обозревателе блоков.
- Вставьте его сюда, чтобы прочитать как десятичную сумму; затем разделите на decimals токена в конвертере decimals токенов или в конвертере единиц Ethereum.
- Если значение выглядит как 0xffff…, посмотрите строку int256: это может быть отрицательное число или «бесконечный» allowance.