2011-01-13 10 views
0
printf(" Dst Address:\n"); 
for(i = 0;i < 4;i++) 
printf(" %d ",((ip->ip_dst.s_addr)&(0x0FF<<(i*8)))>>(i*8)); 

これによって私は192.28.2.11として宛先IPアドレスを印刷することができますが、最初の2つの番号192と28をどのようにして欲しいのですか。 ?ちょうどあなたが持っているコードを変更すると間違って何値を収集して別の変数に保存します

+1

使いたいのですか、それとも印刷したいですか?また、どのようにあなたは複雑なビットの複雑さを行っているが、少し違う何かをするためにコードを微調整する方法を知らないのはどうですか? –

答えて

1

a[0]a[1]であなたにそれらを与える必要があります

int a[4]; 
for (i = 0; i < 4; i++) 
    a[i] = ((ip->ip_dst.s_addr)&(0x0FF<<(i*8)))>>(i*8); 


次のコードは、1つの方法を示しています。これは、出力

#include <stdio.h> 
int main (void) { 
    int i; 
    unsigned int addr = 0x0b0280c0; 
    int a[4]; 
    for (i = 0; i < 4; i++) 
     a[i] = ((addr)&(0x0FF<<(i*8)))>>(i*8); 
    printf ("%d %d %d %d\n", a[0], a[1], a[2], a[3]); 
    return 0; 
} 

:IPアドレスが原因のx86リトルエンディアンフォーマットに(0x0b0280c0)逆転され

192 128 2 11 

を、あなたはコンポーネントは、個々の配列要素に配置されていることがわかります。

関連する問題