私のネットワーク アプリでは、受信したバッファーで、オフセットを既知の構造体へのポインターとして使用したいと考えています。構造体のすべてのフィールドを memcpy() で 2 回 (rx/tx) コピーするのは大変です。私の gcc 4.7.2 (オプション: -O3) が cortex-a8 で実行されていることを知っています。したがって、彼は unaligned int にアクセスできます。多くの構造体、または大きな構造体を持つ可能性があると仮定します。それを行う最良の方法は何ですか?
struct __attribute__ ((__packed__)) msg_struct {
int a; //0 offset
char b; //4 offset
int c; //5 offset
int d[100]; //9 offset
}
char buff[1000];// [0]:header_size [1-header_size]:header [header_size+1]msg_struct
func() {
struct msg_struct *msg;
recv ((void *)buff, sizeof(buff));
msg=buff+header_size; // so, it is unaligned.
...
// some work like:
int valueRcv=msg->c;
//or modify buff before send
msg->c=12;
send(buff,sizeof(buff));
}