无符号整数转换为点分十进制IP地址

5 篇文章 0 订阅

背景

在gdb调试ip地址过程中,往往看到的是一个整数,而不知其具体对应的点分十进制IP地址为多少。

方案一

使用字节对齐方式获得具体点分十进制IP为多少

数据结构

typedef union int2Ip {
    unsigned int addr;
    struct {
        unsigned char a1;
        unsigned char a2;
        unsigned char a3;
        unsigned char a4;
    };
} int2Ip_t;

方案二

区分大端小端来确定具体点分十进制IP地址为多少

unsigned int intIp = 1613535268;
#if __BYTE_ORDER == __BIG_ENDIAN
    printf("%d.%d.%d.%d\n", (intIp >> 24) & 0xff, (intIp >> 16) & 0xff, (intIp >> 8) & 0xff, intIp & 0xff);
#else
    printf("%d.%d.%d.%d\n", intIp & 0xff, (intIp >> 8) & 0xff, (intIp >> 16) & 0xff, (intIp >> 24) & 0xff);
#endif

案例分析

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

typedef union int2Ip {
    unsigned int addr;
    struct {
        unsigned char a1;
        unsigned char a2;
        unsigned char a3;
        unsigned char a4;
    };
} int2Ip_t;

int main(int argc, const char *argv[])
{
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    struct sockaddr_in addr1 = {0};
    addr1.sin_family = AF_INET;
    addr1.sin_port = htons(6000);
    addr1.sin_addr.s_addr = inet_addr("192.168.129.187");

    int2Ip_t int2ip = {
        .addr = 3145836736
    };

    struct sockaddr_in addr2 = {0};
    addr2.sin_family = AF_INET;
    addr2.sin_port = htons(6000);
    addr2.sin_addr.s_addr = inet_addr("127.0.0.1");
    int2Ip_t int2ip2 = {
        .addr = 16777343
    };

    struct sockaddr_in addr3 = {0};
    addr3.sin_family = AF_INET;
    addr3.sin_port = htons(6000);
    addr3.sin_addr.s_addr = inet_addr("36.152.44.96");
    int2Ip_t int2ip3 = {
        .addr = 1613535268
    };

    unsigned int intIp = 1613535268;
#if __BYTE_ORDER == __BIG_ENDIAN
    printf("%d.%d.%d.%d\n", (intIp >> 24) & 0xff, (intIp >> 16) & 0xff, (intIp >> 8) & 0xff, intIp & 0xff);
#else
    printf("%d.%d.%d.%d\n", intIp & 0xff, (intIp >> 8) & 0xff, (intIp >> 16) & 0xff, (intIp >> 24) & 0xff);
#endif

    sleep(10);

    return 0;
}

gdb调试验证其正确性

(gdb) run 
Starting program: /Asterisk/LocalDir/testDir/a.out 
整数转换为点分十进制IP地址为:36.152.44.96
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad9370 in nanosleep () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) frame 2
#2  0x00000000004007d8 in main (argc=1, argv=0x7fffffffe238) at test6.c:54
54        sleep(10);
(gdb) info locals 
sockfd = 3
addr1 = {sin_family = 2, sin_port = 28695, sin_addr = {s_addr = 3145836736}, sin_zero = "\000\000\000\000\000\000\000"}
int2ip = {addr = 3145836736, {a1 = 192 '\300', a2 = 168 '\250', a3 = 129 '\201', a4 = 187 '\273'}}
addr2 = {sin_family = 2, sin_port = 28695, sin_addr = {s_addr = 16777343}, sin_zero = "\000\000\000\000\000\000\000"}
int2ip2 = {addr = 16777343, {a1 = 127 '\177', a2 = 0 '\000', a3 = 0 '\000', a4 = 1 '\001'}}
addr3 = {sin_family = 2, sin_port = 28695, sin_addr = {s_addr = 1613535268}, sin_zero = "\000\000\000\000\000\000\000"}
int2ip3 = {addr = 1613535268, {a1 = 36 '$', a2 = 152 '\230', a3 = 44 ',', a4 = 96 '`'}}
intIp = 1613535268
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《计算机应用基础》测试题 注:操作题在OFFICE2010环境下完成。 1. 单选题 1. 计算机网络分为局域网、城域网和广域网,下列属于局域网的是_B_____。 A、ChinaDDN网 B、Novell网 C、Chinanet网 D、Internet 2. 运算器的完整功能是进行___B___。 A、逻辑运算 B、算术运算和逻辑运算 C、算术运算 D、逻辑运算和微积分运算 3. 在微机的配置中常看到"P4 2.4G"字样,其中数字""2.4G"表示___A___。 A、处理器的时钟频率是2.4 GHz B、处理器的运算速度是2.4 GIPS C、处理器是Pentium4第2.4代 D、处理器与内存间的数据交换速率是2.4GB/S 4. 把用高级程序设计语言编写的程序转换成等价的可执行程序,必须经过___C___。 A、汇编和解释 B、编辑和链接 C、编译和链接 D、解释和编译 5.编译程序的最终目标是___C___。 A、发现源程序中的语法错误 B、改正源程序中的语法错误 C、将源程序编译成目标程序 D、将某一高级语言程序翻译成另一高级语言程序 6. 20GB的硬盘表示容量约为___C___。 A、20亿个字节 B、20亿个二进制位 C、200亿个字节 D、200亿个二进制位 7. 能直接与CPU交换信息的存储器是___C___。 A、硬盘存储器 B、CD-ROM C、内存储器 D、U盘存储器 8. 在微机中,西文字符所采用的编码是___B___。 A、EBCDIC码 B、ASCII码 C、国标码 D、BCD码 9. 域名MH.BIT.EDU.CN中主机名是___A___。 A、MH B、EDU C、CN D、BIT 10. Modem是计算机通过电话线接入Internet时所必需的硬件,它的功能是___D___。 A、只将数字信号转换为模拟信号 B、只将模拟信号转换为数字信号 C、为了在上网的同时能打电话 D、将模拟信号和数字信号互相转换 11. 一个完整的计算机系统的组成部分的确切提法应该是___D___。 A、计算机主机、键盘、显示器和软件 B、计算机硬件和应用软件 C、计算机硬件和系统软件 D、计算机硬件和软件 12. 接入因特网的每台主机都有一个唯一可识别的地址,称为___B___。 A、TCP地址 B、IP地址 C、TCP/IP地址 D、URL 13. 写邮件时,除了发件人地址之外,另一项必须要填写的是___B___。 A、信件内容 B、收件人地址 C、主题 D、抄送 14. 下列选项中,既可作为输入设备又可作为输出设备的是___D___。 A、扫描仪 B、绘图仪 C、鼠标器 D、磁盘驱动器 15. 操作系统将CPU的时间资源划分成极短的时间片,轮流分配给各终端用户,使终端用户单 独分享CPU的时间片,有独占计算机的感觉,这种操作系统称为___C___。 A、实时操作系统 B、批处理操作系统 C、分时操作系统 D、分布式操作系统 16. 十进制数60转换无符号二进制整数是___A___。 A、0111100 B、0111010 C、0111000 D、0110110 17. 计算机网络的目标是实现___C___。 A、数据处理 B、文献检索 C、资源共享和信息传输 D、信息传输、 18. 根据域名代码规定,表示政府部门网站的域名代码是___C___。 A、.net B、.com C、.gov D、.org 19. 一般说来,数字化声音的质量越高,则要求___B___。 A、量化位数越少、采样率越低 B、量化位数越多、采样率越高 C、量化位数越少、采样率越高 D、量化位数越多、采样率越低 20. 计算机技术中,下列度量存储器容量的单位中,最大的单位是___D___。 A、KB B、MB C、Byte D、GB 2. 是非题 1. 感染过计算机病毒的计算机具有对该病毒的免疫性。 (错) 2. 把数据从内存传输到硬盘的操作称为写盘 (对) 3. 电子邮件的英文简称是E-mail (对) 4. 在一台计算机上申请的"电子信箱",以后只有通过这台计算机上网才能收信 (错) 5. 计算机安全是指计算机信息系统资源和信息资源不受自然和人为有害因素的威胁和危害 (对) 6. 字长为16位表示这台计算机的CPU一次能处理16位二进制数 (对) 7. CAD--计算机辅助设计 (对) 8. 硬磁盘可以与CPU之间直接交换数据 (错) 9. 计算机网络是一个在协议控制下的多机互联系统 (对) 10. 如果收件人的计算机没有打开时,发件人发来的电子邮件将丢失 (错) 11第二代电子计算机的主要元件是集成电路. (错) 12. 在CD光盘上标记有"CD-RW"字样,"RW"标记表明该光盘是可多次擦除光盘 (对) 13. 操作系统的五
《计算机应用基础》测试题 注:操作题在OFFICE2010环境下完成。 单选题 1. 计算机网络分为局域网、城域网和广域网,下列属于局域网的是_B_____。 A、ChinaDDN网 B、Novell网 C、Chinanet网 D、Internet 2. 运算器的完整功能是进行___B___。 A、逻辑运算 B、算术运算和逻辑运算 C、算术运算 D、逻辑运算和微积分运算 3. 在微机的配置中常看到"P4 2.4G"字样,其中数字""2.4G"表示___A___。 A、处理器的时钟频率是2.4 GHz B、处理器的运算速度是2.4 GIPS C、处理器是Pentium4第2.4代 D、处理器与内存间的数据交换速率是2.4GB/S 4. 把用高级程序设计语言编写的程序转换成等价的可执行程序,必须经过___C___。 A、汇编和解释 B、编辑和链接 C、编译和链接 D、解释和编译 5.编译程序的最终目标是___C___。 A、发现源程序中的语法错误 B、改正源程序中的语法错误 C、将源程序编译成目标程序 D、将某一高级语言程序翻译成另一高级语言程序 6. 20GB的硬盘表示容量约为___C___。 A、20亿个字节 B、20亿个二进制位 C、200亿个字节 D、200亿个二进制位 7. 能直接与CPU交换信息的存储器是___C___。 A、硬盘存储器 B、CD-ROM C、内存储器 D、U盘存储器 8. 在微机中,西文字符所采用的编码是___B___。 A、EBCDIC码 B、ASCII码 C、国标码 D、BCD码 9. 域名MH.BIT.EDU.CN中主机名是___A___。 A、MH B、EDU C、CN D、BIT 10. Modem是计算机通过电话线接入Internet时所必需的硬件,它的功能是___D___。 A、只将数字信号转换为模拟信号 B、只将模拟信号转换为数字信号 C、为了在上网的同时能打电话 D、将模拟信号和数字信号互相转换 《计算机应用基础》客观题附答案全文共4页,当前为第1页。《计算机应用基础》客观题附答案全文共4页,当前为第1页。11. 一个完整的计算机系统的组成部分的确切提法应该是___D___。 《计算机应用基础》客观题附答案全文共4页,当前为第1页。 《计算机应用基础》客观题附答案全文共4页,当前为第1页。 A、计算机主机、键盘、显示器和软件 B、计算机硬件和应用软件 C、计算机硬件和系统软件 D、计算机硬件和软件 12. 接入因特网的每台主机都有一个唯一可识别的地址,称为___B___。 A、TCP地址 B、IP地址 C、TCP/IP地址 D、URL 13. 写邮件时,除了发件人地址之外,另一项必须要填写的是___B___。 A、信件内容 B、收件人地址 C、主题 D、抄送 14. 下列选项中,既可作为输入设备又可作为输出设备的是___D___。 A、扫描仪 B、绘图仪 C、鼠标器 D、磁盘驱动器 15. 操作系统将CPU的时间资源划分成极短的时间片,轮流分配给各终端用户,使终端用户单独分享CPU的时间片,有独占计算机的感觉,这种操作系统称为___C___。 A、实时操作系统 B、批处理操作系统 C、分时操作系统 D、分布式操作系统 16. 十进制数60转换无符号二进制整数是___A___。 A、0111100 B、0111010 C、0111000 D、0110110 17. 计算机网络的目标是实现___C___。 A、数据处理 B、文献检索 C、资源共享和信息传输 D、信息传输、 18. 根据域名代码规定,表示政府部门网站的域名代码是___C___。 A、.net B、.com C、.gov D、.org 19. 一般说来,数字化声音的质量越高,则要求___B___。 A、量化位数越少、采样率越低 B、量化位数越多、采样率越高 C、量化位数越少、采样率越高 D、量化位数越多、采样率越低 20. 计算机技术中,下列度量存储器容量的单位中,最大的单位 ___D___。 A、KB B、MB C、Byte D、GB 是非题 1. 感染过计算机病毒的计算机具有对该病毒的免疫性。 (错) 2. 把数据从内存传输到硬盘的操作称为写盘 (对) 3. 电子邮件的英文简称是E-mail (对) 4. 在一台计算机上申请的"电子信箱",以后只有通过这台计算机上网才能收信 (错) 5. 计算机安全是指计算机信息系统资源和信息资源不受自然和人为有害因素的威胁和危害 (对) 6. 字长为16位表示这台计算机的CPU一次能处理16位二进制数 (对) 7. CAD--计算机辅助设计 (对) 《计算机应用基础》客观题附答案全文共4页,当前为第2页。《计算机应用基础》客观题附答案全文共4页,当前为第2页。8. 硬磁盘可以与CPU

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值