首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >整数到IP地址-C

整数到IP地址-C
EN

Stack Overflow用户
提问于 2009-11-05 20:49:33
回答 7查看 128.1K关注 0票数 32

我正在准备一个测验,我有一个强烈的怀疑,我的任务可能是实现这样一个功能。基本上,给定一个采用网络表示法的IP地址,我们如何将其从32位整数转换为点分十进制表示法(类似于155.247.182.83)的字符串?显然,我们也不能使用任何类型的inet函数……我被难住了!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-05 21:02:10

这里有一个简单的方法:(ip >> 8)(ip >> 16)(ip >> 24)将第二、第三和第四个字节移动到低位字节,而& 0xFF在每一步中隔离最低有效字节。

代码语言:javascript
复制
void print_ip(unsigned int ip)
{
    unsigned char bytes[4];
    bytes[0] = ip & 0xFF;
    bytes[1] = (ip >> 8) & 0xFF;
    bytes[2] = (ip >> 16) & 0xFF;
    bytes[3] = (ip >> 24) & 0xFF;   
    printf("%d.%d.%d.%d\n", bytes[3], bytes[2], bytes[1], bytes[0]);        
}

在第一步中有一个隐含的bytes[0] = (ip >> 0) & 0xFF;

使用snprintf()将其打印为字符串。

票数 80
EN

Stack Overflow用户

发布于 2009-11-05 21:11:42

另一种方法:

代码语言:javascript
复制
union IP {
    unsigned int ip;
    struct {
      unsigned char d;
      unsigned char c;
      unsigned char b;
      unsigned char a;
    } ip2;
};

...
char  ips[20];
IP ip;
ip.ip = 0xAABBCCDD;

sprintf(ips, "%x.%x.%x.%x", ip.ip2.a, ip.ip2.b, ip.ip2.c, ip.ip2.d);
printf("%s\n", ips);
票数 7
EN

Stack Overflow用户

发布于 2009-11-05 20:53:00

提示:将32位整数分解为4个8位整数,并打印出来。

类似的内容(未编译,YMMV):

代码语言:javascript
复制
int i = 0xDEADBEEF; // some 32-bit integer
printf("%i.%i.%i.%i",
          (i >> 24) & 0xFF,
          (i >> 16) & 0xFF,
          (i >> 8) & 0xFF,
          i & 0xFF);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1680365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档