Я получил cstring, исходящий от звонка из gzread. Я знаю, что данные являются блоками, и каждый блок состоит из беззнаковых int, char, int и unsigned short int.
Так что мне было интересно, каков стандартный способ разбиения этого cstring на соответствующие переменные.
Скажем, первые 4 байта - это целое число без знака, следующий байт - символ, следующие 4 байта - со знаком int, а последние 2 байта - короткое целое без знака.
//Some pseudocode below which would work
char buf[11];
unsigned int a;
char b;
int c;
unsigned short int d;
Полагаю, я мог бы использовать memcpy с соответствующими смещениями.
memcpy(&a, buf, sizeof(unsigned int));
memcpy(&b, buf+4, sizeof(char));
memcpy(&c, buf+5, sizeof(int));
memcpy(&d, buf+9, sizeof(unsigned short int));
Или лучше использовать несколько битоператоров? Как смещение и маскировка.
Или лучше было бы сжать все 11 байтов непосредственно в какую-то структуру, или это вообще возможно? Исправлена ли структура памяти структуры, и будет ли это работать с gzread?