gzread からの呼び出しに由来する cstring を取得しました。データがブロックであり、各ブロックが unsigned int、char、int、および unsigned short int で構成されていることはわかっています。
だから、このcstringを適切な変数に分割する標準的な方法は何だろうと思っていました。
最初の 4 バイトは unsigned int、次のバイトは char、次の 4 バイトは signed int、最後の 2 バイトは unsigned short int です。
//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 バイトすべてを何らかの構造体に直接 gzreading する方がよいでしょうか、それとも可能でしょうか? 構造体のメモリ レイアウトは修正されていますか? これは gzread で機能しますか?