2013-07-10 183 views
0

我寫了一個代碼將ip轉換爲十進制,它似乎給出了意想不到的結果,這是因爲從BYTE到DWORD的轉換不匹配。BYTE轉換爲DWORD

有沒有辦法將字節變量轉換爲字,類型轉換似乎不起作用。

下面是代碼

//function to convert ip 2 decimal 
    DWORD ip2dec(DWORD a ,DWORD b,DWORD c,DWORD d) 
    { 

    DWORD dec; 
    a=a*16777216; 
    b=b*65536; 
    c=c*256; 
    dec=a+b+c+d; 

    return dec; 

    } 

int main() 
{ 
    BYTE a,b,c,d; 
    /* some operations to split the octets and store them in a,b,c,d */ 
    DWORD res=ip2dec(a,b,c,d); 
    printf("The converted decimal value = %d",dec); 
} 

我得到的價值爲-1062731519代替3232235777的部分。

+2

首先發布你的實際代碼,因爲你在這個錯誤,例如什麼是在printf dec?第二你可能想在你的printf中使用「%u」 –

回答

3

您的轉換可能是正確的,但您的printf語句不是。

使用"%u「,而不是"%d"

+0

謝謝你的工作 –

4

儘管DWORD未經簽名,但您將其打印出來,就好像它已簽名(%d)。改爲嘗試%u

2

嘗試MAKEWORD()宏觀但是在printf中使用%d仍將給你一個錯誤的輸出

2

你可以這樣做:。

DWORD dec = 0; 
BYTE *pdec = (BYTE *)&dec; 
pdec[0] = a; 
pdec[1] = b; 
pdec[2] = c; 
pdec[3] = d; 
0
#include <stdio.h> 

int main(void) 
{ 

    short a[] = {0x11,0x22,0x33,0x44}; 
    int b = 0; 

    b = (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3]); 

    printf("Size of short %d \nSize of int %d ", sizeof(short), sizeof(int)); 

    printf("\n\nValue of B is %x", b); 
    return 0; 
}