C언어 타입 캐스팅(type casting)
🍖 C언어 type casting 🍖
C 언어에서 type casting은 데이터의 자료형을 다른 자료형으로 변환하는 과정이며 크게 두가지 유형의 형변환이 있다.
이런 타입 캐스팅 과정은 CTF 문제를 풀 때 코드를 이해하는데에 있어서 기본이다.
- 묵시적 형변환
묵시적 형변환은 데이터 타입이 서로 호환되는 경우 자동으로 수행되는 형변환이다. 예를 들어, int형 변수와 float형 변수를 더하는 경우, int형 변수는 자동으로 float형으로 형변환된다.
int a = 10;
float b = 2.5;
// 묵시적 형변환
printf("%f\n", a + b); // 12.5
- 명시적 형변환
명시적 형변환은 개발자가 직접 데이터 타입을 변환하는 것을 말하며 (자료형)값과 같은 형식으로 수행된다. 예를 들어, int형 변수를 char형으로 변환하려면 다음과 같이 작성할 수 있다.
int a = 10;
// 명시적 형변환
char b = (char)a;
명시적 형변환은 묵시적 형변환과 달리 데이터 타입이 호환되지 않는 경우에도 사용할 수 있다. 이러한 경우, 데이터가 손실될 수 있으므로 주의해야 한다.
데이터의 int 형 변환 시 숫자가 아닌 데이터를 만나면 오류가 뜨거나 오류가 난 데이터 앞까지만 형 변환이 된다.
"000555ARD"의 경우, 정수로의 변환은 "000555" 부분까지만 이루어지고 나머지 "ARD" 부분은 변환되지 않는다.
C언어에서 형변환은 다음과 같은 용도로 사용될 수 있다.
- 데이터 타입을 맞추기 위해
- 데이터를 다른 함수 또는 함수 포인터에 전달하기 위해
- 데이터를 출력 또는 입력하기 위해
***더 자세한 예시***
주어진 코드는 unsigned char 형식의 문자 배열인 arr을 사용하고, 그 데이터를 부호 없는 정수인 unsigned int 형식의 포인터를 사용하여 해석하려는 것을 보여준다.
이것은 arr 배열의 데이터를 4바이트 크기의 unsigned int 정수로 해석하겠다는 것이다.