我要把标示ip地址的char *类型转换为DWORD类型,通过下面方法可以实现:
char *strip = "144.168.1.20";
DWORD dTest=0;
dTest=(DWORD)strip;
此时dTest的值为4315926但是,我把strip该为"192.168.1.20"或“144.168.1.2”等等,dTest的值始终为4315926请教各位这是为什么?

解决方案 »

  1.   


    为什么一个十进制数“1032291340”等同于一个IP地址“61.135.132.12”呢?其实我刚才已经暗示过大家了,四位点分十进制形式的IP地址“61.135.132.12”代表一组32位二进制数码,如果合在一起再转换成一个十进制数的话,答案就是1032291340。转换方法很简单,就是数制的按权展开:12×2560+132×2561+135×2562+61×2563=12+33792+8847360+1023410176=1032291340(基数为256,即28)。
      

  2.   

    但是把IP地址改成另一个地址,dTest的值都是一样,为什么?
      

  3.   

    dTest=(DWORD)strip;
    =====================这样系统的强制转换有问题,知道吧,
    自己写一个函数进行相应的转换即可。
      

  4.   

    strip的值为字符串的首地址...
      

  5.   

    你用的什么系统有这样的转换函数?真是高级了!!char *strip = "144.168.1.20"; 在内存中的字节依次是:31 34 34 24 31 36 38 24 31 24 32 30 (DWORD)strip 取得的是以无符号整数方式表示的strip的地址值!所以不管你怎样改变它的值,你取得的值在一次运行中是不会改变的。如果你(DWORD)*strip则会等于607401009!要实现这种转换只有自己写函数。但你得知道IP的每一节在DWORD中对应的位置。
      

  6.   

    #include <iostream>
    #include <assert.h>
    #include <windows.h>
    using namespace std;BOOL ConvertAddr(char *Address, DWORD &Result);int main()
    {
    DWORD dwRet;
    char str[] = "61.135.132.12";
    ConvertAddr(str, dwRet);
    cout << dwRet << endl;
    return 0;
    }BOOL ConvertAddr(char *Address, DWORD &Result)
    {
    BOOL bRet = TRUE;
    char *token;
    DWORD dwRet = 0; token = strtok(Address, ".");
    int nPower = 3;
    int i;
    DWORD dwPower;
    while(token != NULL)
    {
    cout << token << endl; i = nPower;
    dwPower = 1;
    while(i > 0)
    {
    dwPower *= 256;
    i--;
    }
    nPower--; dwRet += atoi(token) * dwPower;
    token =  strtok(NULL, ".");
    }
    Result = dwRet;
    return bRet;
    }