gpt4 book ai didi

IP处理函数inet_aton()和inet_ntoa()使用说明

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章IP处理函数inet_aton()和inet_ntoa()使用说明由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

MYSql的IP对int的转换函数  select inet_aton(ip) from table_name;  网络地址:  192.168.33.123  每一个值最大不会越过255,也就是十六进制的FF,两个Byte刚好表示的最大值是255,  这样子,就可以用一个32位的整形来保存这个地址  192 168 33 123  1100 0000 1010 1000 0010 0001 0111 1011  把这些二进制合在一起就是32位的数了  11000000101010000010000101111011  十进制为  3232244091  * INET_ATON(expr)  给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。  mysql> SELECT INET_ATON('209.207.224.40');  -> 3520061480  产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2^24 + 207×2^16 + 224×2^8 + 40 进行计算。  INET_ATON() 也能理解短格式 IP 地址:  mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');  -> 2130706433, 2130706433  注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至 2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见11.2节,“数值类型”。  * INET_NTOA(expr)  给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。  mysql> SELECT INET_NTOA(3520061480);  -> '209.207.224.40'  在做项目时,并不知道这两个函数,所以对IP的处理都是自己写的函数,但是使用时效率却是十分的差,下面函数是把IP转化成整数:  。

复制代码代码如下

CREATE FUNCTION `transIPtoInt`(ip char(31)) RETURNS char(31)  begin  DECLARE value1 CHAR(10);  DECLARE value2 CHAR(10);  DECLARE value3 CHAR(10);  DECLARE value4 CHAR(10);  set value1=SUBSTRING_INDEX(ip, '.', 1);  set value2=SUBSTRING_INDEX(ip, '.', 2);  set value2=SUBSTRING_INDEX(value2, '.', -1);  set value3=SUBSTRING_INDEX(ip, '.', -2);  set value3=SUBSTRING_INDEX(value3, '.', 1);  set value4=SUBSTRING_INDEX(ip, '.', -1);  set value1=value1<<24;  set value2=value2<<16;  set value3=value3<<8;  return value1+value2+value3+value4;  end;  。

为了IP地址比较的方便,我还写了一个把IP地址中每一段都补足三位的函数,如下:  。

复制代码代码如下

CREATE FUNCTION `fillIp`(ip char(31)) RETURNS char(31)  begin  DECLARE value1 CHAR(31);  DECLARE value2 CHAR(10);  DECLARE value3 CHAR(10);  DECLARE value4 CHAR(10);  set value1=SUBSTRING_INDEX(ip, '.', 1);  set value2=SUBSTRING_INDEX(ip, '.', 2);  set value2=SUBSTRING_INDEX(value2, '.', -1);  set value3=SUBSTRING_INDEX(ip, '.', -2);  set value3=SUBSTRING_INDEX(value3, '.', 1);  set value4=SUBSTRING_INDEX(ip, '.', -1);  set value1=LPAD(value1,3,'0');  set value2=LPAD(value2,3,'0');  set value3=LPAD(value3,3,'0');  set value4=LPAD(value4,3,'0');  return CONCAT(value1,'.',value2,'.',value3,'.',value4);  end;  。

以下是一些补充 * INET_ATON(expr)  给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。  mysql> SELECT INET_ATON('209.207.224.40');  -> 3520061480  产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算。  INET_ATON() 也能理解短格式 IP 地址:  mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');  -> 2130706433, 2130706433  注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至 2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见MySQL文档中的“数值类型”。  * INET_NTOA(expr)  给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。  *  mysql> SELECT INET_NTOA(3520061480);  -> '209.207.224.40'  --------------------------------------------------------------------------------------------------  整型字段的比较比字符串效率高很多,这也符合一项优化原则:字段类型定义使用最合适(最小),最简单的数据类型。  inet_aton()算法,其实借用了国际上对各国IP地址的区分中使用的ip number。  a.b.c.d 的ip number是:  a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。  --------------------------------------------------------------------------------------------------  利用mysql的内置函数处理时间戳问题  eg : select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');  结果: 2004 3rd August 03:35:48 2004  。

最后此篇关于IP处理函数inet_aton()和inet_ntoa()使用说明的文章就讲到这里了,如果你想了解更多关于IP处理函数inet_aton()和inet_ntoa()使用说明的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com