4.C 4

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

문자열이 주어지고 해당 문자열을 인코딩 하려 할때는 char 배열이나 포인터로 선언해서 문자열을 주고 그것을 인코딩 하면 된다. 하지만 binary data의 경우에는 ascii 값 128 이상의 문자가 들어올 경우가 있다. (더 자세한 번호별 문자 모양은 확장 아스키값을 구글에 쳐서 보면 될 것같다.) 예를 들어 한글, 한문 등등 영어외의 문자들의 경우이다. binary data는 말 그대로 데이터 이기 때문에 문자를 0과 1로만 나타내는 것이고 0과1의 배치 규칙에 따라 영어인지, 숫자인지 를 다시 인지시키는 것이다. 나의 경우 char 문자열 배열로 16진수의 binary data를 주어지고 그것을 인코딩 하려고 할때 나타난 에러였다. char는 1바이트이다 그런데 부호가 있다. 즉 8비트를 전부 ..

4.C 2022.09.25

함수원형에 나오는 restrict는 무엇을 의미할까?

함수의 매뉴얼을 보다보면 매개변수에 restrict으로 선언해놓는 경우가 여럿 보인다. 개발자로 공부를 함에 있어 이런게 궁금하지 않을 수 없어서 찾아본 결과 최적화 이슈를 해결하기 위해 c99에서나온 키워드라는 것을 알았다. 이 키워드는 어셈블리어에서부터 세분화해서 봐야하는 키워드 이다. 그렇지만 쉽게 설명하는것이 쉽게 이해할 수 있을거라 생각해서 정리한 결과는 아래와 같다. 실제로 우리가 소스코드를 작성하고 컴파일을 하면 어떠한 변수를 선언하고 해당 변수에 대해 수정,삭제 등을 하지 않아도 어셈블리단에서 프로세스가 돌때마다 해당 변수를 찾아가서 확인을 한다.(이 변수가 진짜 그대로인지 확인하는역할) 그리고 나서 변경점이 없다는 것을 확인하고 쓰게 한다. 그런데 restrict 키워드를 사용하면 해당 ..

4.C 2022.09.16

Size_t 형은 뭘까?

함수들의 메뉴얼을 보다보면 매개변수의 형식이 size_t 인 경우가 있다. 그래서 size_t라는 형이 있는지 확인이 필요했고, 무엇을 의미하는지, 왜 쓰는지에 대해 알고싶었다. 사진을 보면 size_t 형은 결국 typedef unsigned int 형식이다. 다시말해 unsigned int형을 typedef로 선언한 별칭이다. 근데 그러면 unsigned int로 쓴다는 건 부호가 없는 정수형식이라는 것을 길기때문에 size_t 형식으로 나타낸걸로 생각하면 되나? 아니다. size_t형식은 먼저 int나 unsigned int와 같이 운영체제의 비트에 따라 크기가 달라진다. x86(32비트)운영체제에서는 부호없는 32비트 정수(4byte)가 될 것이고 x64(64비트)운영체제에서는 부호없는 64비트의..

4.C 2022.09.16

strtok_s가 thread safe 한 이유

우선 strtok 함수의 인터페이스와 사용예시는 다음과 같다. #include char *strtok(char *restrict str, const char *restrict delim); //=======함수 예시 #include #include int main(){ char str[] = "Hello World."; char *ptr = strtok(str, " "); while (ptr != NULL){ printf("%s\n", ptr); ptr = strtok(NULL, " "); } } strtok함수는 delim 매개변수로 주어진 구분자들을 str문자열에서 찾아내 해당 구분자 앞까지를 token화시켜 구분한다. 구분자로 지정되어있던 곳을 NULL로 바꾼후 str을 출력하고 다시 str문자열의..

4.C 2022.09.16