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.
  1. "172[Space].[Space]168.5.1" is a valid input. Should process the output normally.
  2. "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为长整型的更多相关文章

  1. Mac地址转换成long长整型 2

    数据之间的转换可以使用   System.Convert Mac地址转换成long长整型 /// <summary> /// 解析长整形的数据使其转换为macID /// </sum ...

  2. Mac地址转换成long长整型

    Mac地址转换成long长整型 using System;using System.Collections.Generic;using System.IO;using System.Text;usin ...

  3. Python基础:数值(布尔型、整型、长整型、浮点型、复数)

    一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...

  4. JAVA 长整型转换为IP地址的方法

    JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...

  5. PHP长整型在32位系统中强制转化溢出

    CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机 ...

  6. [转]字符型IP地址转换成数字IP的SQL函数

    使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助.      /**//*--调用示例       sele ...

  7. javascript没有长整型

    记录一下前几天踩坑的经历. 背景:一个项目某一版之后很多用easyui的表格控件treegrid渲染的表格都显示不出来了 奇怪的地方主要有以下几点: 项目在测试环境才会这样,在本机能够正常运行,多次重 ...

  8. python基础知识2——基本的数据类型——整型,长整型,浮点型,字符串

    磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 对于Python ...

  9. 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)

    1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...

随机推荐

  1. 安装虚拟机与Linux的学习

    #虚拟机 在安装虚拟机之前,我先上网查了一些关于虚拟机的知识. 虚拟机,即Virtual Machine,在计算机科学中的体系结构裏,是指一种特殊的软件,他可以在计算机平台和终端用户之间创建一种环境, ...

  2. [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]

    Description Solution 神仙操作orz. 首先看数据范围,显然不可能是O(n2)的.(即绝对不是枚举那么简单的),我们考虑dp. 定义f(x,k)为以x为根的子树中与x距离为k的节点 ...

  3. Docker入门篇(三)之docker-compose单机编排

    1.docker-compose的简介 docker-compose作为dokcer的官方编排工具,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群.实现对doc ...

  4. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  5. 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件

    查看Oracle数据库表空间大小(空闲.已使用),是否要增加表空间的数据文件 1.查看表空间已经使用的百分比 Sql代码 select a.tablespace_name,a.bytes/1024/1 ...

  6. shell 参数

    转:http://hi.baidu.com/ipvsadm/item/489d9e16460195ddbe9042ee linux中shell变量$#,$@,$0,$1,$2的含义解释 linux中s ...

  7. phpcms v9手机站不支持组图($pictureurls)的修改

    phpcms v9自带的手机门户网站,有时候我们需要用到组图功能$pictureurls,我在做的时候发现,如果$pictureurls中只有一张图片会正常显示,但是如果有两张或两张以上的图片的时候, ...

  8. 数据库mysql的常规操作

    1. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进 ...

  9. Altera FPGA AS,PS,Jtag配置模式区别

    Altera FPGA  AS,PS,Jtag配置模式区别 FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS模式(active seri ...

  10. Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter]

    <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" cl ...