linux下 如何将一个长整型转换成一个点分十进制地址,如何实现字符IP地址和整型数转换?...

IP地址(Internet Protocol Address),全称为网际协议地址,是一种在Internet上的给主机编址的方式。IP堪称为互联网的重要的桥梁,是为计算机网络相互连接进行通信而设计的协议。作为IP协议提供的一种统一的地址格式,常见的IP地址分为IPv4与IPv6两大类,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IPV4地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。 与IPv4相比,IPv6的128位地址长度可以提供3.402823669×1038个地址。对于IPV4而言,在使用到网络配置参数时,一般输入格式是以字符型“xxx.xxx.xxx.xxx”格式输入,而保存时则转换为4个8位(unsigned char)整型数或者1个32位(unsigned int)整型数,以节约存储空间,对于使用EEPROM等小容量介质存储有优势。当然也可以以字符型保存,开辟12或者15个字节的存储空间。因此,需用到IP地址与整型数互转的函数,存储时将字符型的IP地址转换为整型;使用时,从存储位置读取的整型IP地址再转换为字符型。

字符IP地址转为整型的优势在于减少存储IP地址空间,减少索引IP字符串类型消耗的资源量。

1. 整型转字符IP地址

字符串操作首要注意点是结束符,对于字符格式化函数“sprintf”,大家对于是否会添加结束符‘\0’,存在很多异议,据网友在不同编译器下测试,结果是不一样的,有的会带结束符,有的则不带。因此,稳妥的做法是,程序员自己加上结束符,适合在不同编译器,避免更换编译器时出现问题。

77967c552258f085f60a6906a0ad2610.png

2. IP地址转整型数

方式一:

7c211e7f21eaa420a23b6e988736e0b2.png

上述代码调用到的“strtok”函数是非线性安全函数(不可重入),因为strtok原型采用的是静态内存分配,如果多线程访问时会出现数据异常。在Linux平台下,提供了线程安全函数“strtok_r”,Linux较新版本支持“strsep”函数,效率更高。

方式二:

对于方式一,应用在Windows上位机上可以正确执行,但在MCU端执行时出错,初步判断是“strsep”函数问题。实现该函数的初衷就是应用在嵌入式上,因此,重新实现字符IP地址转整型数函数。

add33fa93417d396746ba34aecb53eb3.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值