linux网络通信中的地址形式转换

对于IPv4协议来说,ip是一个32位的整数,对于IPv6来说,ip是一个128位的整数。在内存中,ip都以二进制的形式存储,但是不易于观察,所以

可以转化将其转化为点分十进制的表达形式。

在linux中,提供了 ip二进制和点分十进制互相转化的函数:

inet_ntop 将二进制转化为点分十进制,af表示使用的协议,AF_INET表示使用的是IPv4,AF_INET6表示使用的IPv6,src是一个表示ip的

struct in_addr的结构体,dst是用来存储ip点分十进制形式的字符串,size是dst的长度。

inet_pton用于将ip的点分十进制转化为二进制表达形式,af表示是IPv4还是IPv6,src是存储ip点分十进制的字符串,dst是一个存储ip的

struct in_addr 类型的结构体。

  1. #include<stdio.h>
  2. #include<arpa/inet.h>
  3. #include<stdlib.h>
  4. void pton(const char* src)
  5. {
  6. struct in_addr addr;
  7. int temp = inet_pton(AF_INET,src,&addr);
  8. if(temp<=0)
  9. {
  10. perror("fail to convert");
  11. exit(-1);
  12. }
  13. printf("convert success,ip:%x\n",addr.s_addr);
  14. }
  15. void ntop(struct in_addr addr)
  16. {
  17. char dst[16]={0}; // 255.255.255.255 3*4+3(‘.‘)+1(‘\0‘)=16
  18. const char* temp = inet_ntop(AF_INET,&addr,&dst,sizeof(dst));
  19. if(temp==NULL)
  20. {
  21. perror("fail to convert");
  22. exit(-1);
  23. }
  24. printf("convert success,ip:%s\n",dst);
  25. }
  26. int main()
  27. {
  28. pton("192.168.1.24");
  29. struct in_addr addr;
  30. addr.s_addr = 0x1801a8c0;
  31. ntop(addr);
  32. return 0;
  33. }

来自为知笔记(Wiz)

时间: 2024-10-13 22:23:10

linux网络通信中的地址形式转换的相关文章

linux brige中mac地址的比较

1 static inline unsigned compare_ether_addr(const u8 *addr1, const u8 *addr2) 2 { 3 const u16 *a = (const u16 *) addr1; 4 const u16 *b = (const u16 *) addr2; 5 6 BUILD_BUG_ON(ETH_ALEN != 6); 7 return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) !=

windows和linux中换行符的转换

数据开发平台使用上传脚本报错:保存失败,文件编码格式不正确,请修改文件换行符为Unix终束符! 修改方式:DOS系统下,使用文本编译器另存为,然后选择换行符为unix终束符. 解释: windows 文件的换行符为:[CR][LF] Linux和Unix文件的换行符为:[LF] 有些需要转换使用,如修改或替换安卓andriod的hosts文件,需要保证换行符为Unix形式才能使用. 其中一种办法是在linux系统中重新保存一份文件: 但是:如何在windows系统中,转换成Unix / Linu

ARM中MMU地址转换理解

首先,我们要分清ARM CPU上的三个地址:虚拟地址(VA,Virtual Address).变换后的虚拟地址(MVA,Modified Virtual Address).物理地址(PA,Physical Address) 启动MMU后,CPU核对外发出虚拟地址VA,VA被转换为MVA供MMU使用,在这里MVA被转换为PA:最后通过PA读写实际设备 MMU的作用就是负责虚拟地址(virtual address)转化成物理地址(physical address). 32位的CPU的虚拟地址空间达到

纯文本中识别URI地址并转换成HTML

问题 有一段纯文本text, 欲将其插入DOM节点div中. text中可能有超链接, 邮件地址等. 如果有, 识别之. 分析 如果只是纯文本, 插入div中, 只要将div.innerText设置为text即可. text中的URI地址可以用正则识别, 并将其替换为<a/>标签组成的字符串. 此时 text变成了HTML字符串html. HTML字符串html可以赋值给div.innerHTML. 但如果原text中存在HTML语义的 字符串呢? 因此, 在识别URI之前, 需要将原text

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

Linux c字符串中不可打印字符转换成16进制

本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的不可打印字符转换成16进制,此处提供一个函数供使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void printhex(unsigned char *src,int len) {     

LINUX系统中动态链接库的创建与使用{补充}

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

LINUX系统中动态链接库的创建与使用

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-12-17 0 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置的方法: 即时生效(重启后失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 route add default gw 192.168.1.1 //添加网关 启动生效: vim /etc/sysconfig/ne