char 포인터 배열의 강제 형 변환 관련

leboum의 이미지

char* data = (char *)malloc(sizeof(char) * 8);

memset(data, 0x00, 8);
data[0] = (unsigned short*)1122;
data[2] = (unsigned short*)1122;
data[4] = (unsigned int*)4455;
printf("Data : %d, %d, %d, %d\n", data[0], data[2], data[4]);

Data : 0, 98, 98, 0, 103, 0 0 0

위와 같이 char*의 배열을 잡아서 강제형 변환 후 데이터를 넣고 싶은데,
생각처럼 안 들어가네요.

이유가 뭔지 알려주시면 감사하겠습니다.

라스코니의 이미지

data[0] = (unsigned short*)1122;

가 아니라 실제로는

unsigned short a = 1122;

data[0] = (unsigned char*)&a;
...
printf("Data : %d\n", *(unsigned short *)data[0]);

로 하시고 싶었던 듯...

익명 사용자의 이미지

// 1122 라는 unsigned short type 정수를 char []의 변수에 넣어보자.
const int size_of_ushort = sizeof(unsigned short);
char data[size_of_ushort];

for (int i = 0; i < size_of_ushort; i++)
{
data[i] = char((1122u >> 8*i) & 0xFF);
}

cout << *(unsigned short*)data << endl;