Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将目标地址与C++;_C++_Network Programming_Ip Address_Forwarding - Fatal编程技术网

C++ 将目标地址与C++;

C++ 将目标地址与C++;,c++,network-programming,ip-address,forwarding,C++,Network Programming,Ip Address,Forwarding,基本上,我有两个4字节的IP地址: u_int32_t daddr; // in the packet u_int32_t entry; // in the forwarding table 我还有一个前缀与转发表中的条目相匹配: unsigned short prefix; // in forwarding table corresponding to entry 我需要根据前缀将daddr与条目匹配。我很确定这意味着什么:例如,如果前缀是23,那么我必须将条目的前23位与daddr匹配。

基本上,我有两个4字节的IP地址:

u_int32_t daddr; // in the packet
u_int32_t entry; // in the forwarding table
我还有一个前缀与转发表中的条目相匹配:

unsigned short prefix; // in forwarding table corresponding to entry
我需要根据前缀将daddr与条目匹配。我很确定这意味着什么:例如,如果前缀是23,那么我必须将条目的前23位与daddr匹配。老实说,我甚至不知道从哪里开始,因为我不知道如何匹配单个位

我有一个转发表,其中有很多条目,每个条目都有不同的前缀。我不知道如何将da与正确的条目匹配。。任何帮助都将不胜感激。 我的daddr存储在我从netinet ip.h文件获得的标准ip头中


编辑:我找到了“最长”的匹配项。因此,我不是比较条目来检查它们是否相等,而是比较它们来确定有多少位是相同的。当所有的位都相同时,最好的匹配是显而易见的。

类似于
daddr&(0xffffffff,只比较一些无符号类型
UInt
a
b
的顶部
n
位:

const unsigned int NBITS = sizeof(UInt) * CHAR_BIT;

UInt a, b;

if ((a >> (NBITS - n)) == (b >> (NBITS - n))) { /*...*/ }
要比较底部
m
位:

if ((a << (NBITS - m)) == (b << (NBITS - m))) { /*...*/ }
NBITS = 12, n = 4, m = 7:

     a:  1 2 3 4 x A B C D E F G
     b:  1 3 2 5 x A B C D E F G

a >> 8:  0 0 0 0 0 0 0 0 1 2 3 4
b >> 8:  0 0 0 0 0 0 0 0 1 3 2 5

a << 5:  A B C D E F G 0 0 0 0 0
b << 5:  A B C D E F G 0 0 0 0 0