3

私のネットワーク アプリでは、受信したバッファーで、オフセットを既知の構造体へのポインターとして使用したいと考えています。構造体のすべてのフィールドを 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));
}
4

1 に答える 1