【java入门必做案例】十六进制字符串转整数
2018-03-10 11:13
281 查看
十六进制的百度百科如下:
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
详细十六进制的换算之类请读者自查,下面直接给出十六进制字符串转整数的实现
值为数字的char 转 int:
要先判断char是否为数字:
同理,整个把单个字符转成整数的函数如下:
最后便是将多个字符代表的整数值组合成一个整数返回了,原理也很简单,如:”9876”,结果应该是 9*16^3 + 8*16^2 + 7*16^1 + 6,但是在java中,符号” ^ “表示按位异或,不是乘方,乘方应该用
完整代码如下:
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
详细十六进制的换算之类请读者自查,下面直接给出十六进制字符串转整数的实现
值为数字的char 转 int:
/*先用String.valueOf(ch)将char转成String, 再用parseInt(),这个容易忘记,多打几次*/ int a = Integer.parseInt(String.valueOf(ch));
要先判断char是否为数字:
/*char的比较是直接用它的ASCII码值进行比较, ASCII码表上数字是连在一起的,不懂的可以查下*/ if(ch >= '0' && ch <= '9'){ a = Integer.parseInt(String.valueOf(ch)); }
同理,整个把单个字符转成整数的函数如下:
/** * 获取十六进制字符ch的int值,如A:10,F:15,9:9 */ public static int getHexValue(char ch){ if(ch >= '0' && ch <= '9'){ return Integer.parseInt(String.valueOf(ch)); } if ( (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) { switch (ch) { case 'a': case 'A': //这里不用break是因为执行了return以后就不会再往下执行了 return 10; case 'b': case 'B': return 11; case 'c': case 'C': return 12; case 'd': case 'D': return 13; case 'e': case 'E': return 14; case 'f': case 'F': return 15; } } /* -1 我习惯用它表示出错,在调用的地方检测它 在后面可以弄一个异常类来抛出,这里简单用-1检测 */ return -1; }
最后便是将多个字符代表的整数值组合成一个整数返回了,原理也很简单,如:”9876”,结果应该是 9*16^3 + 8*16^2 + 7*16^1 + 6,但是在java中,符号” ^ “表示按位异或,不是乘方,乘方应该用
Math.pow(16,3); //表示16的三次方,都很简单,新手多看几遍,尝试打一下应该问题不大
/* str形如:10,不包括十六进制前面的Ox 没判断是否字符串 */ public static int hex2Int(String str) { int result = 0; //str.toCharArray()把String类的str转换成字符数组 char[] hex = str.toCharArray(); for(int i = 0; i < hex.length; i++){ /*之前在getHexValue()方法中用-1表示非十六进制字符, 若返回-1,应该在调用的时候提示输入折字符串包含非十六进制字符, 在最后的main方法中会调用*/ if(getHexValue(hex[i]) != -1){ result += getHexValue(hex[i]) * Math.pow(16, hex.length-i-1); } else { return -1; } } return result; }
完整代码如下:
public class hexstring2Int {
public static void main(String[] args) {
String hex = "ffff";
int tmp = hex2Int(hex);
if(tmp != -1){
System.out.println(hex2Int(hex));
}else {
System.out.println("包含非十六进制字符!!!");
}
}
/** * 获取十六进制字符ch的int值,如A:10,F:15,9:9 */ public static int getHexValue(char ch){ if(ch >= '0' && ch <= '9'){ return Integer.parseInt(String.valueOf(ch)); } if ( (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) { switch (ch) { case 'a': case 'A': //这里不用break是因为执行了return以后就不会再往下执行了 return 10; case 'b': case 'B': return 11; case 'c': case 'C': return 12; case 'd': case 'D': return 13; case 'e': case 'E': return 14; case 'f': case 'F': return 15; } } /* -1 我习惯用它表示出错,在调用的地方检测它 在后面可以弄一个异常类来抛出,这里简单用-1检测 */ return -1; }
/* str形如:10,不包括十六进制前面的Ox
没判断是否字符串
*/
public static int hex2Int(String str) {
int result = 0;
char[] hex = str.toCharArray();
for(int i = 0; i < hex.length; i++){
if(getHexValue(hex[i]) != -1){
result += getHexValue(hex[i]) * Math.pow(16, hex.length-i-1);
}
else {
return -1;
}
}
return result;
}
}
笔者也是新人,若有错误疑问或是建议,请不吝赐教,感激不尽
相关文章推荐
- Java基础入门笔记-整数+小数+字符串+打印
- Java编程题:将一个十六进制的字符串转换成一个十进制的整数
- Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- 主题:Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- 【比特币】十六进制字符串转换成整数数组
- JAVA_SE基础——61.字符串入门
- C++实现十六进制字符串转换为十进制整数的方法
- Java案例:统计文本中所有整数之和
- Java数组的应用:案例:杨辉三角,三维数组,字符串数组
- Java 字节数组与十六进制表示的字符串,互相转换
- 把字符串转换成整数java实现
- 跟王老师学Java三大特性(二):案例 QuickHit:游戏输出字符串
- Java字节、十进制、十六进制、字符串之间的相互转换
- Java byte数组与十六进制字符串互转
- Java将对象系列化成十六进制的字符串以及将十六机制的字符串反序列化成对象
- Java:从字符串中提取整数、浮点型数值
- java中判断字符串是否是一个整数
- java字符串与整数之间的互相转换
- Hadoop入门案例(四)全排序之自定义分区 字符串(单词)排序