I defined a struct named queryData like the code below. When I tried to using shift and right operation to operate and assign a data, qdata.data.data4[0], printing the data out, there is something wrong that the data I stated before is a char which is 8 bits, but when I print it it actually 32 bits,0xffffff8b. I wonder how it could be like this. Thank you.
int main(void){
union Data{
char data2[2];
char data4[4];
};
struct queryData{
char byte; // 2bytes or 4bytes.
union Data data;
};
struct queryData qdata;
unsigned long int data;
data = rand()%4294967295;
qdata.byte = 4;
qdata.data.data4[0] = (char)(data>>24);
qdata.data.data4[1] = (char)((data<<8)>>24);
qdata.data.data4[2] = (char)((data<<16)>>24);
qdata.data.data4[3] = (char)((data<<24)>>24);
printf("%ld\n",data);
printf("%x\n",qdata.data.data4[0]);
printf("%x\n",qdata.data.data4[1]);
printf("%x\n",qdata.data.data4[2]);
printf("%x\n",qdata.data.data4[3]);
printf("%x",(unsigned int)(1804289383<<8)>>24);
return EXIT_SUCCESS;
}
The result is below: The result after run