문자열이 주어지고 해당 문자열을 인코딩 하려 할때는 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 |