Java进制转换(二)

Java进制转换 二、八、十六 转 十进制

二八进制 转 十六进制:从右向左,依次按位权展开,左边位权高,右边位权低

(一)二进制、八进制 ----> 十进制

二八进制 转 十六 进制,代码可以复用

// data 是要转换的数据  radix 是进制
public void converse(int data,int radix) {
	int num = 0;
	int p = 0;  // 用来做指数
	while (data != 0) {
		int k = data % 10;
		num += k * Math.pow(radix, p);
		data /= 10;
		p++;
	}
	System.out.println(num);
}

// 测试实现:
converse(100, 2);   // 2 进制的 100 转为 10 进制  ----结果 4
converse(100, 8);   // 8 进制的 100 转为 10 进制  ----结果 64

(二)十六进制 ----> 十进制

(1) 如果输入的16进制数不带 Ox 前缀:
直接调用现有的方法实现:
int x = Integer.parseInt(str,16)

(2) 如果输入的16进制数带有 Ox 前缀:截去前面两位标识:
int x = Integer.parseInt(str.subString(2), 16)

(3) 代码实现,建立 0–9、A–F 与 0–15 的 HashMap 映射关系

public static void converse2(String str) {
		String[] character = {"A","B","C","D","E","F"};
		Map<String, Integer> map = new HashMap<String, Integer>();
		// 建立 0--9 之间的映射
		for(int i = 0; i <= 9; i++) {
			map.put(i+"", i);
		}
		// 建立 10--15  与 A--F 之间的映射
		for (int i = 10; i <= 15; i++) {
			map.put(character[i-10], i);
		}
		
		// 输入中如果有小写  全部转为大写
		str = str.toUpperCase();
		int m = str.length();
		// 将字符串存入到 字符数组中
		String[] st = new String[m];
		for (int i = 0; i < st.length; i++) { 
			// 截取字符存入数组中
			st[i] = str.substring(i,i+1);
		}

		int index = st.length - 1;
		int num = 0;
 		
		// 注意:如果输入是类似 “1A” 没有标识的 16 进制数, i从0开始
		// 如果输入是 “ox1A” 有标识的 16 进制数,i 从 2 开始
		for (int i = 0; i < st.length; i++) {
			num += map.get(st[i]) * Math.pow(16, index-i);
		}
		System.out.println(num);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值