我不是专业的 C 开发人员...说实话我不是专业的开发人员,所以我使用的术语可能不正确。
我花了大约最后一个小时阅读有关define
陈述,然后阅读pointer
参考文献,并且对以下实例感到非常困惑。
鉴于:
#define get_u_int16_t (X,O) (*(u_int16_t *)(((u_int8_t *)X) + O))
if (get_u_int16_t(packet->payload, 0) == htons(0x0004)) {
//do something
return;
}
这是否意味着将指针get_u_int16_t(packet->payload, 0)
引用的数据拆分packet->payload
为 8 位部分,并返回前 8 位(由于+ 0
)?
这是我尝试保留的 nDPI 库的单个部分 afp.c 的示例。
[笔记]
htons()是一个函数,它采用word
主机字节顺序(大多数机器上的小端,或大端机器上的大端)的(16 位)并将其转换为word
网络字节顺序(总是大端)。在这种情况下,(感谢 AndreyT!)word
的偏移量 0将返回大端序,因此 ntop 开发人员决定使用来转换给定值(在这种情况下,确定流是否为的字节模式之一Apple 归档协议),它是网络堆栈的小端到大端。packet->payload
word
htons()
[更多的]
我已经将一些问题移到了一个更有利于模糊问题的论坛,以了解一些技术细节,这些技术细节可能对未来处理类似情况的人有用。