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>头文件中.下 ...
随机推荐
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 20155231 java实验一 Java开发环境的熟悉
20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...
- 20155318 2016-2017-2 《Java程序设计》第二周学习总结
20155318 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 Java编程风格 基本语法与C相似:调用main函数写public static void ...
- Firefox+Burpsuite抓包配置(可抓取https)
0x00 以前一直用的是火狐的autoproxy代理插件配合burpsuite抓包 但是最近经常碰到开了代理却抓不到包的情况 就换了Chrome的SwitchyOmega插件抓包 但是火狐不能抓包的问 ...
- 20155331 2016-2017-2《Java程序设计》课程总结
20155331 2016-2017-2<Java程序设计>课程总结 每周作业 预备作业1:新学期,新展望 预备作业2:游戏经验 第一周学习总结:大致浏览教材并提出问题 第二周学习总结:基 ...
- 20155338 2016-2017-2《Java程序设计》第1周学习总结
20155338 2016-2017-2<Java程序设计>第1周学习总结 了解成绩构成 成绩构成:100分=翻转课堂考核12次(512 = 60)+ 实验5次(3 5 =15)+ 团队项 ...
- c++ 结构指针和双向链表
结构指针 为结构指针动态分配内存 结构中的结构 双向链表 结构指针 struct mytime { //char name[256]; int hour;//时 int min; //分 i ...
- Why HBase
3.1.1,为什么选用HBases a) 容量巨大 HBase 的单表可以有百亿行.百万列,数据矩阵横向和纵向两个维度所支持的数据量级 都非常具有弹性.传统的关系型数据库,如 Oracle ...
- day7 opencv+python 读取视频,没有东西
1.读取视频man.avi, 报错. 我的视频和文件在同一目录下. #coding=utf-8 import numpy as np import cv2 cap = cv2.VideoCapture ...
- 2801 LOL-盖伦的蹲草计划
2801 LOL-盖伦的蹲草计划 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 众所周知,LOL这款伟大的游戏,有个叫 ...