CS

[CS] 16진수 (hexadecimal)

펭귄코기 2023. 6. 14. 11:39

실무에 들어와 보니 DB 데이터 타입이 바이너리로 되어있고

그 안에 값은 16진수 형태로 저장되어있는것을 볼 수 있었다

 

이를 byte[] 로 뽑아서 원하는 값으로 파싱하는 작업을 거치기도 하는데

왜 16진수로 쓰는지 궁금해져서 이 글을 쓰게 되었다

 

1. 16진수 란?

16진수란 16을 기수로 하는 번호체계를 의미한다

즉 다음 숫자를 위해 새로운 위치를 추가하기 전에

16개의 일련 번호를 기본 단위로 포함하는 번호체계이다

 

16진법에서는 숫자 0~9, 영문 알파벳 문자 A~F 까지를 사용한다

 

나중에 왜 16진수로 다룰지 설명하겠지만

16진수는 1byte, 거의 항상 8bit 로 정의 되는

컴퓨터에서 2진수를 표현하는 편리한 방법이다

 

16진수를 사용하면 10진수보다 2진수를 간단하게 나타낼 수 있다

 

 

2. 10진수를 16진수로 바꾸기

JPG 이미지 파일은 항상 255 216 255로 시작된다

이것이 10진수인데 컴퓨터에서는 10진수를 사용하지 않는다

컴퓨터는 0과 1만 이해할 수 있기 때문이다

 

 

먼저 255 216 255를 2진수로 나타내면 11111111 11011000 11111111 이다

보면 알듯이 2진수로 모든 데이터를 표현하기에는 너무 길다...

그렇기 때문에 16진수로 바꾸어 주는데 2^424가 16이기 때문에

4bit씩 두 덩어리로 나누면 0000부터 1111까지는 16진수로 표현이 가능하다

 

10은 a, 11은 b ... 15는 f 이걸 이용해서

4bit씩 짤라서 16진수로 변환해주고

0x 를 붙이고 뒤에 해당 숫자를 넣으면 16진수로 변환이 가능하다

 

3. 16진수를 왜 쓰는가

앞에서 계속 설명해 왔지만 최종적으로 정리해 보자

 

ASCII 코드에 의해 A, B, C 는 10진수로 65, 66, 67이 된다

컴퓨터는 10진수를 이해하지 못하니까 2진수로 표현해야하는데

그러면 01000001 01000010 01000011이 된다

0과 1로 표현하니까 너무 길어진다

 

컴퓨터는 8개의 비트가 모인 바이트 단위로 정보를 표현하기에

 

01000001 을 1byte로보고

1byte는 8bit니까 이를 두개로 나눠

4bit, 4bit 로 만든다

 

이렇게 해주면 컴퓨터가 알아듣게도 하면서

사람이 알아보기도 편하고 데이터를 다루기 좋아 사용한다고

최종적으로 결론을 내릴 수 있을것 같다

 

A == 65 == 0100 0001 == 0x41