C/C++ 에서 변수를 선언하고 값을 넣으면, 메모리에 그 값이 저장된다.

C/C++ 에서는 typecast 를 허용한다.

int a = '\x78\x56\x34\x12';

라고 하면 메모리에 78 56 34 12 라고 들어가고 값을 읽어들일때는
12 34 56 78 로 읽어들일 것이다.

위 방식말고 16진수 12345678 의 10진수값을 바로 a 에 넣어도 메모리에는 같은 값이 들어간다.

이렇게 int 로 선언한후 char 포인터를 이용해 a 의 주소를 가리킨 다음 그 값을 읽으면
78 을 읽어 들인다.

만약 char a[4] = {'\x78','\x56',\x34',\x12'};
로 선언한후 int *p = (int *)a;
로 한후 *p 를 출력하게 되면 16진수 12345678 의 10진수 값이 나올것이다.

C/C++ 에서는 메모리에 저장되는 값은 16진수 형태로 같고 그걸 읽어들이는 자료형에 의해서 값을 읽는 방식이 정해진다.

float *p = (float *)a; 하게 되면, a 에 저장되어 있는값의 float 표현으로 출력될 것이다.

만약 **p 이면 a 에 저장되어 있는 4바이트내용의 주소에 있는 값을 읽어올것이다.
0x12345678 에 있는 값을 참조할 것이다.

이해가 되면, 자료형에 크게 상관없이 프로그램을 원하는데로 만들수 있을 것이다.

오로지 char 배열만 가지고 얼마든지 int , float, 포인터를 흉내낼수 있을것이다.

typecast 를 이용해서.

+ Recent posts