[CS] 16진수 (hexadecimal)
실무에 들어와 보니 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