4.C

왜 hex인코딩에서 unsigned char 로 선언해야할까?

yoons.Dev 2022. 9. 25. 23:58

문자열이 주어지고 해당 문자열을 인코딩 하려 할때는 char 배열이나 포인터로 선언해서 문자열을 주고 그것을 인코딩 하면 된다.

 

하지만 binary data의 경우에는 ascii 값 128 이상의 문자가 들어올 경우가 있다. (더 자세한 번호별 문자 모양은 확장 아스키값을 구글에 쳐서 보면 될 것같다.) 예를 들어 한글, 한문 등등 영어외의 문자들의 경우이다.

 

binary data는 말 그대로 데이터 이기 때문에 문자를 0과 1로만 나타내는 것이고 0과1의 배치 규칙에 따라 영어인지, 숫자인지 를 다시 인지시키는 것이다.

 

나의 경우 char 문자열 배열로 16진수의 binary data를 주어지고 그것을 인코딩 하려고 할때 나타난 에러였다.

 

char는 1바이트이다 그런데 부호가 있다. 즉 8비트를 전부 사용하는게 아니라 맨 앞의 비트는 부호의 값을 나타내는 비트로 두고 나머지 7비트를 이용해 의미를 전달한다. 그래서 char 는 128개의 문자를 나타낼 수 있다는 것이다. ( 2^7 이기때문)

그런데 확장아스키코드는 128 이상의 번호가 주어진다. 16진수로 표현하면 0x00 ~ 0x7F 까지가 일반 char 의 가능 구역이고  0xA0 ~ 0xFF까지 가 확장 아스키가 추가로 주어지는 값이다. 즉 256개의 문자를 나타낼 수 있게 된다.

 

여기서 보면 확장아스키값으로 표현할 수 있는 문자는 일반 아스키값의 정확히 2배다. 즉 2^8 개를 표현할 수 있다. 그리고 그것을 표현하려면 8개의 비트를 사용해야한다는 것이다. 그래서 unsigned char로 주어져야한다. unsigned char는 부호가 없는 문자를 나타낸다는 의미이다. 부호가 없다는 것은 굳이 맨 앞의 비트를 부호의 유무를 나타내기 위해 쓰지않아도 된다고 말하는 것이다. 그래서 0xA0 이상의 binary data도 문제없이 읽어올 수 있다. 

 

 

'4.C' 카테고리의 다른 글

함수원형에 나오는 restrict는 무엇을 의미할까?  (0) 2022.09.16
Size_t 형은 뭘까?  (0) 2022.09.16
strtok_s가 thread safe 한 이유  (2) 2022.09.16