В основном вы полагаетесь на неопределенное поведение.Выравнивание структуры и т. Д. Но в любом случае ...
(int *) pck + 4. Продвинет указатель 4 * sizeof (int).Это неправильно, мы хотим увеличить его на 1, если предположим, что структура упакована и sizeof (short) == 2, таким образом ...
int *timeLow = (int * )pck + 1; // i want to get tLow
printf("Time Low :%d\n",*timeLow);
выводит правильный результат.
Что касается сообщения, вам нужно сделать что-то грязное.Поскольку я на x86_64, компилятор решил заполнить void * на 8-байтовых границах, поэтому смещение составило 16, а не ожидаемое 12.
Мы в основном получаем указатель на void *.Таким образом, код будет выглядеть следующим образом:
char **msg = (char**)((char *)pck + 16) ;// want data
printf("Message :%s\n",*msg);
НИКОГДА напишите код, подобный этому, это просто иллюстрирует точку.