请教:DWORD数据类型的问题

CathySun118 2006-08-19 11:33:26
我要把标示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

请教各位这是为什么?
...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
christ115 2006-08-19
  • 打赏
  • 举报
回复
strip的值为字符串的首地址...
djfu 2006-08-19
  • 打赏
  • 举报
回复
dTest=(DWORD)strip;
=====================

这样系统的强制转换有问题,知道吧,
自己写一个函数进行相应的转换即可。
undercall 2006-08-19
  • 打赏
  • 举报
回复
但是把IP地址改成另一个地址,dTest的值都是一样,为什么?
CathySun118 2006-08-19
  • 打赏
  • 举报
回复
不明白,能不能详细解释!
djfu 2006-08-19
  • 打赏
  • 举报
回复

为什么一个十进制数“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)。
xyx119 2006-08-19
  • 打赏
  • 举报
回复
晕! 用inet_addr
djfu 2006-08-19
  • 打赏
  • 举报
回复
#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;
}
vcPlayer 2006-08-19
  • 打赏
  • 举报
回复
你用的什么系统有这样的转换函数?真是高级了!!

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中对应的位置。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧