【发布时间】:2014-10-30 07:10:41
【问题描述】:
我正在尝试定义一个元素有条件存在的 C 结构。这是我要定义的标头的具体示例:
typedef struct flowHeader {
int magicNum ;
int trafficType ;
// few other int parameters
int flowDirection; // Present ONLY if trafficType = TT_V6
// few other int parameters
} t_flowHeader ;
我想知道定义这种数据类型的最佳方式是什么。我想将此标头应用于在线接收的缓冲区。由于缺少一个元素 - 结构的大小变化 4 个字节,我正在努力如何管理它?
# define TT_V6 31
# define FD_NA 0
int flowDir ;
unsigned char buf[ MAXSZ ] ;
t_flowHeader * hdr ;
hdr = (t_flowHeader *) buf ;
if (hdr->trafficType == TT_V6) {
flowDir = hdr->flowDirection ;
} else {
flowDir = FD_NA ;
}
..
【问题讨论】:
-
解除引用前重新排列buf中的4字节
-
这不是一个选项 - 在某些时候我需要序列化这个结构的逻辑......所以改变顺序不是一个选择。这也将完全改变我通过将标题投射到传入消息缓冲区而获得的速度优势。