2017-03-08 9 views
-4
#define DEFAULT_IPV4_PING_TYPES (PINGTYPE_ICMP_PING|PINGTYPE_TCP|PINGTYPE_TCP_USE_ACK|PINGTYPE_TCP_USE_SYN|PINGTYPE_ICMP_TS) 

上述語法實際上做了什麼?下面的 是常數的值。將#define常數使用或運算符的多個值

#define PINGTYPE_ICMP_PING 2 
#define PINGTYPE_TCP 16 
#define PINGTYPE_TCP_USE_SYN 64 
#define PINGTYPE_ICMP_TS 8 

它創建一個數組?

+0

不,這是定義'(PINGTYPE_ICMP_PING | PINGTYPE_TCP | PINGTYPE_TCP_USE_ACK | PINGTYPE_TCP_USE_SYN | PINGTYPE_ICMP_TS)''。這些是常數的值:'2','16','64'和'8'。 – LogicStuff

+0

它實際上創建了常量值而不是數組。 PINGTYPE_ICMP_PING | PINGTYPE_TCP | PINGTYPE_TCP_USE_ACK | PINGTYPE_TCP_USE_SYN | PINGTYPE_ICMP_TS這會分配const值並執行按位運算符功能。 – MSD

+0

在您喜愛的搜索引擎上查找** Bitmasks **。 – oranja

回答

0

該宏爲所有ping類型定義了一個掩碼。

這是位運算

一樣的,當你做位或你

0x2 | 0x10 | 0x8 | 0x40 = 0x5A 

它是二進制格式更加清晰(使用8位的簡化)

#define PINGTYPE_ICMP_PING 0x2 
#define PINGTYPE_TCP 0x10 
#define PINGTYPE_TCP_USE_SYN 0x40 
#define PINGTYPE_ICMP_TS 0x8 

00000010 (2) 
01000000 (64) 
00001000 (8) 
00010000 (16) 
============= 
01011010 (5A) 
相關問題