字符串IPv4和数值类型转换

ゝ一纸荒年。 2022-09-06 13:26 267阅读 0赞

相对字符串存储,使用无符号整数来存储有如下的好处:

  • 节省空间,不管是数据存储空间,还是索引存储空间
  • 便于使用范围查询(BETWEEN…AND),且效率更高

通常,在保存IPv4地址时,一个IPv4最小需要7个字符,最大需要15个字符,所以,使用VARCHAR(15)即可。MySQL在保存变长的字符串时,还需要额外的一个字节来保存此字符串的长度。而如果使用无符号整数来存储,只需要4个字节即可

  1. public class IpLongUtils {
  2. /**
  3. * 把字符串IP转换成long
  4. *
  5. * @param ipStr 字符串IP
  6. * @return IP对应的long值
  7. */
  8. public static long ip2Long(String ipStr) {
  9. String[] ip = ipStr.split("\\.");
  10. return (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
  11. + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
  12. }
  13. /**
  14. * 把IP的long值转换成字符串
  15. *
  16. * @param ipLong IP的long值
  17. * @return long值对应的字符串
  18. */
  19. public static String long2Ip(long ipLong) {
  20. StringBuilder ip = new StringBuilder();
  21. ip.append(ipLong >>> 24).append(".");
  22. ip.append((ipLong >>> 16) & 0xFF).append(".");
  23. ip.append((ipLong >>> 8) & 0xFF).append(".");
  24. ip.append(ipLong & 0xFF);
  25. return ip.toString();
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,267人围观)

还没有评论,来说两句吧...

相关阅读