비트코인/비트코인 구조

[비트코인 구조] 가변 길이 정수(VarInt)

라이튼 2022. 10. 21. 12:00

미리 알아야 할 내용들


 

[비트코인 구조] 빅 엔디안(Big endian)과 리틀 엔디안(Little endian)

빅 엔디안(Big endian)과 리틀 엔디안(Little endian)  엔디안(Endian)은 바이트가 저장되는 순서입니다. 빅 엔디안은 일반적으로 사람이 읽는 순서로, 리틀 엔디안 빅 엔디안의 역순으로 저장합니다. 예

kwjdnjs.tistory.com


가변 길이 정수(VarInt)

 

 비트코인에서는 큰 수를 보다 효율적으로 표현하기 위해 수의 크기에 따라 표현 형식이 변하는 가변 길이 정수(VarInt)를 사용합니다. 비트코인에서 사용하는 가변 길이 정수의 규칙은 다음과 같습니다.

 

가변 길이 정수 형식
0 ~ 252(0xFC) 그대로 사용
(0 ~ 0xFC)
253(0xFD) ~ 65,535(0xFFFF) 0xFD + 2바이트(리틀 엔디안)
(0xFDFD00 ~ 0xFDFFFF)
65,536(0x10000) ~ 4,294,967,295(0xFFFFFFFF) 0xFE + 4바이트(리틀 엔디안)
(0xFE00000100 ~ 0xFEFFFFFFFF)
4,294,967,296(0x100000000)
~
18,446,744,073,709,551,615(0xFFFFFFFFFFFFFFFF)
0xFF + 8바이트(리틀 엔디안)
(0xFF0000000001000000 ~ 0xFFFFFFFFFFFFFFFFFF)

 

 가변 길이 정수의 값은 리틀 엔디안이므로 FD, FE, FF를 제외한 값을 뒤에서부터 1바이트(16진수 2자리)씩 읽어야 합니다.

 

 -0xFDFF00(리틀 엔디안) -> FD00FF(빅 엔디안) -> 0x00FF = 255