2011-01-13 2 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 주소를 인쇄 할 수 있지만 처음 두 숫자 192와 28을 원한다면 어떻게이 두 값을 얻을 수 있습니까? ? 당신이 가지고있는 코드를 수정 잘못 무엇값을 수집하고 별도의 변수에 저장

+1

사용 하시겠습니까, 아니면 인쇄하고 싶습니까? 또한, 어떻게 당신이 그런 복잡한 비트 twiddling 했어하지만 조금 다른 코드를 조금이라도 꼬집는 방법을 모르겠어요? –

답변

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); 

.


다음 코드는이를 수행하는 한 가지 방법을 보여줍니다. 이것은 출력

#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 주소 때문에 86 리틀 엔디안 포맷 (0x0b0280c0) 반전

192 128 2 11 

과는 구성 요소가 각 어레이 요소에 배치되는 것을 알 수있다.

관련 문제