2013-07-10 136 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; 
}