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);
}