【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”,结果应该是 916^3 + 816^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;
	}
}

笔者也是新人,若有错误疑问或是建议,请不吝赐教,感激不尽

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值