2017-03-08 5 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

あなたのお気に入りの検索エンジンで**ビットマスク**を検索してください。 – 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) 
関連する問題