3

次の構造体と関数を検討してください

typedef struct __attribute__((__packed__)) req_file {
  uint32_t start_pos;
  uint32_t byte_count;
  uint16_t name_len;
} req_file;

void req_file_hton(req_file *d){
  d->name_len = htons(d->name_len);
  d->start_pos = htonl(d->start_pos);
  d->byte_count = htonl(d->byte_count);
}

void req_file_ntoh(req_file *d){
  d->name_len = ntohs(d->name_len);
  d->start_pos = ntohl(d->start_pos);
  d->byte_count = ntohl(d->byte_count);
}

上記のコードは、多くのフィールドを持つ多くの構造体のために書くのは面倒です。構造体の名前とフィールドを一度構成し、関数struct_name_htonstruct_name_ntoh生成を行いたいと思います。x マクロで少し遊んでみましたが、うまくいきませんでした。移植可能な C プリプロセッサ ソリューションが高く評価されます (C++ ではありません)。

4

4 に答える 4