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. DotNetty学习笔记

    DotNetty项目本身的示例很容易运行起来,但是具体到真实的应用场景,还是需要进一步理解DotNetty的通道处理细节,这样才能够在实际项目应用中处理具体的问题. 简单的场景下会有以下几个问题,第一 ...

  2. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  3. 20155318 《Java程序设计》实验三 (敏捷开发与XP实践)实验报告

    20155318 <Java程序设计>实验三 (敏捷开发与XP实践)实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化 ...

  4. 可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking

    可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking 对Skywalking有兴趣的同学参见:年轻人的第一个APM-Skywalking 之前在搭建Skywalki ...

  5. (转) 转换Drupal7模块到Drupal8

    转载地址:http://verynull.com/2015/11/02/Converting-7-x-modules-to-8-x/ 本节主要介绍如何把drupal7的模块转化为drupal8.参考资 ...

  6. 前端--javaScript之简单介绍

    一.javaScript(以下简称js)的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端 ...

  7. Mongodb大数据语法大全

    JSON和MONGODBJSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式. ...

  8. Unity中几个特殊路径在各个平台的访问方式

    1.文件路径Resources:Unity在发布成移动端项目后,其他文件路径都将不存在,但是如果有一些必要的资源,可以放在Resources文件夹下,因为这个文件夹下的所有资源是由Unity内部进行调 ...

  9. IDEA 破解图文教程 - 2018.9 更

    你好!这里是你要找的 IDEA 破解方法 目录     一.前言    二.IDEA 安装         2.1 下载IDEA 旗舰版         2.2 开始安装         2.3 自定 ...

  10. Spring Boot 整合JDBC 实现后端项目开发

    一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...