IP地址转换32为长整型
Programming Question:
Convert an IPv4 address in the format of null-terminated C string into a 32-bit integer.For example, given an IP address “172.168.5.1”, the output should be a 32-bit integer with “172” as the highest order 8 bit, 168 as the second highest order 8 bit, 5 as the second lowest order 8 bit, and 1 as the lowest order 8 bit. That is,"172.168.5.1" => 2896692481
Requirements:
- You can only iterate the string once.
- You should handle spaces correctly: a string with spaces between a digit and a dot is a valid input; while a string with spaces between two digits is not.
- "172[Space].[Space]168.5.1" is a valid input. Should process the output normally.
- "1[Space]72.168.5.1" is not a valid input. Should report an error.
- Please provide unit tests.
public class IPV4Demo { private static final String INVALID_FORMAT = "invalid format";
private static final long INVALID_CODE = -1; public long parseIP4Address(String input) {
if (StringUtils.isBlank(input) || input.startsWith(" ") || input.startsWith(".") || input.endsWith(" ")
|| input.endsWith(".")) {
System.out.println(INVALID_FORMAT);
return INVALID_CODE;
} long sum = 0;
int shift = 3;
String[] array = input.split("\\.");
if (array.length != 4) {
System.out.println(INVALID_FORMAT);
return INVALID_CODE;
} boolean parseError = false;
for (int index = 0; index < array.length; index++) {
try {
long segment = Long.parseLong(array[index].trim());
sum += segment << ((shift--) * 8);
} catch (Exception ex) {
parseError = true;
break;
}
}
if (parseError) {
System.out.println(INVALID_FORMAT);
return INVALID_CODE;
}
return sum;
}
}
Unit Test
public class IPV4DemoTest { private static IPV4Demo demo = new IPV4Demo();
@Test
public void testNull(){
Long value = demo.parseIP4Address(null);
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testEmptyString(){
Long value = demo.parseIP4Address("");
Assert.assertTrue(Objects.equal(-1l, value));
} @Test
public void testEmptyString2(){
Long value = demo.parseIP4Address(" 172.168.5.1");
Assert.assertTrue(Objects.equal(-1l, value));
} @Test
public void testEmptyString3(){
Long value = demo.parseIP4Address("172.168.5.1 ");
Assert.assertTrue(Objects.equal(-1l, value));
} @Test
public void testRegular(){
Long value = demo.parseIP4Address("172.168.5.1");
Assert.assertTrue(Objects.equal(2896692481l, value));
}
@Test
public void testWithSpace_01(){
Long value = demo.parseIP4Address("172 .168.5.1");
Assert.assertTrue(Objects.equal(2896692481l, value));
}
@Test
public void testWithSpace_02(){
Long value = demo.parseIP4Address("172. 168.5.1");
Assert.assertTrue(Objects.equal(2896692481l, value));
}
@Test
public void testWithSpace_03(){
Long value = demo.parseIP4Address("172 . 168.5.1");
Assert.assertTrue(Objects.equal(2896692481l, value));
}
@Test
public void testWithSpace_04(){
Long value = demo.parseIP4Address("1 72.168.5.1");
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testWithDot_01(){
Long value = demo.parseIP4Address("172.168.5.1.");
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testWithDot_02(){
Long value = demo.parseIP4Address("172.168.51.");
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testWithDot_03(){
Long value = demo.parseIP4Address("172.168.51");
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testWithDot_04(){
Long value = demo.parseIP4Address(".172.168.51");
Assert.assertTrue(Objects.equal(-1l, value));
}
@Test
public void testWithDot_05(){
Long value = demo.parseIP4Address("..168.51");
Assert.assertTrue(Objects.equal(-1l, value));
}
}
IP地址转换32为长整型的更多相关文章
- Mac地址转换成long长整型 2
数据之间的转换可以使用 System.Convert Mac地址转换成long长整型 /// <summary> /// 解析长整形的数据使其转换为macID /// </sum ...
- Mac地址转换成long长整型
Mac地址转换成long长整型 using System;using System.Collections.Generic;using System.IO;using System.Text;usin ...
- Python基础:数值(布尔型、整型、长整型、浮点型、复数)
一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...
- JAVA 长整型转换为IP地址的方法
JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...
- PHP长整型在32位系统中强制转化溢出
CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机 ...
- [转]字符型IP地址转换成数字IP的SQL函数
使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助. /**//*--调用示例 sele ...
- javascript没有长整型
记录一下前几天踩坑的经历. 背景:一个项目某一版之后很多用easyui的表格控件treegrid渲染的表格都显示不出来了 奇怪的地方主要有以下几点: 项目在测试环境才会这样,在本机能够正常运行,多次重 ...
- python基础知识2——基本的数据类型——整型,长整型,浮点型,字符串
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 对于Python ...
- 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)
1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...
随机推荐
- Egret 菜鸟级使用手册--第二天
################新的一天,我还是大佬 今天加载个英雄,先在GameScene里搞一个英雄出来,然后再创建一个Hreo类 接下来又一个新的API egret.TouchEvent.TOU ...
- latex常用符号
希腊字母 字母名称 大写 小写 大写latex 小写latex alpha A \(\alpha\) \alpha beta B \(\beta\) \beta gamma \(\Gamma\) \( ...
- 20155233 《Java程序设计》 第十三周课堂练习总结
20155233 <Java程序设计>第十三周课堂练习总结 测试题目 测试1 在IDEA中对P145 MathTool.java 使用JUnit进行单元测试,测试用例不少于三个,要包含正常 ...
- BZOJ3174. [TJOI2013]拯救小矮人(dp)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3174 题解 其实此题并不需要那么多YY的部分. 我们考虑若干个小矮人逃出的顺序.若跳出的 ...
- MySQL授权root
1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- 深入解析QML引擎, 第2部分: 绑定(Bindings)
原文 QML Engine Internals, Part 2: Bindings 译者注:这个解析QML引擎的文章共4篇,分析非常透彻,在国内几乎没有找到类似的分析,为了便于国内的QT/QML爱好 ...
- java excel导出(表头合并,多行表头)
@RequestMapping(value="orderExcelList2") public void orderExcelList2forJava(Order order,Ht ...
- ConcurrentHashMap(JDK1.8)为什么要放弃Segment
今天看到一篇博客:jdk1.8的HashMap和ConcurrentHashMap,我想起了前段时间面试的一个问题:ConcurrentHashMap(JDK1.8)为什么要使用synchronize ...
- ES数据备份到HDFS
1.准备好HDFS(这里我是本机测试) 2.es 安装repository-hdfs插件 (如es为多节点需在每个节点都安装插件) elasticsearch-plugin install repos ...
- 从零开始的Python学习Episode 9——集合
集合 集合是一个无序的,不重复的数据组合,是python基本的数据类型,把不同的元素组成一起就形成集合. 一.创建集合 s = set('smile')list = ['1','2','3']prin ...