0

IP を 10 進数に変換するコードを書きましたが、予期しない結果になるようです。これは、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);
}

3232235777 ではなく -1062731519 という値を取得しています。

4

5 に答える 5

4

DWORDは署名されていませんが、署名されているかのように印刷しています ( ) %d%u代わりに試してください。

于 2013-07-10T06:02:28.603 に答える
3

あなたの変換はおそらく正しいですが、printf ステートメントはそうではありません。

"%uの代わりに " を使用し"%d"ます。

于 2013-07-10T06:04:21.360 に答える
2

MAKEWORD()マクロを試してみてください。しかし、printf で %d を使用すると、間違った出力が得られます。

于 2013-07-10T06:09:05.000 に答える
2

次のようにできます。

DWORD dec = 0;
BYTE *pdec = (BYTE *)&dec;
pdec[0] = a;
pdec[1] = b;
pdec[2] = c;
pdec[3] = d;
于 2013-07-10T06:11:31.270 に答える
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;
}
于 2015-05-13T14:42:21.897 に答える