Hex-10진수 변환기란 무엇인가요?
Hex-10진수 변환기는 0xde0b6b3a7640000 같은 16진수 문자열을 읽어 같은 숫자를 10진수(여기서는 1,000,000,000,000,000,000, 즉 1018)로 돌려주며, 그 반대도 수행합니다. 블록체인 작업에서는 숫자가 최대 256비트이므로 변환기는 임의 정밀도 정수를 사용해야 하고, EVM이 사용하는 32바이트 0 패딩 워드와 부호 있는(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이 반환됩니다. 앞의 0을 제거하면 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진수 수량으로 읽은 뒤, 토큰 소수점 변환기나 이더리움 단위 변환기로 토큰의 소수점 자릿수로 나눕니다.
- 값이 0xffff…처럼 보이면 int256 행을 확인하세요. 음수이거나 "무한" allowance일 수 있습니다.