//十进制 转化为 十六进制
public class DexToHex {
public static void main(String[] args) {
int num = 654321;
ArrayStack<String> stack = new ArrayStack<>();
while(num != 0){
int a = num % 16;
if (a < 10){
stack.push(a + "");
}else { //10-A 11-B 12-C 13-C 14-E 15-F
// 65 66 67 68 69 70
stack.push((char)(a + 55) + "");
}
num /= 16;
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()){
//将栈中字符全部弹出,拼接成一个字符串
sb.append(stack.pop());
}
System.out.println(sb.toString());
}
}
十进制转换为十六进制的过程中,利用ASCII码进行字符强转。
//十六进制 转 十进制
public class HexToDec {
public static void main(String[] args) {
String hex = "9FBF1";
ArrayStack<Character> stack = new ArrayStack<>();
for (int i = 0; i < hex.length(); i++) {
stack.push(hex.charAt(i));
}
int sum = 0;
int mi = 0;
while (!stack.isEmpty()){
//9 F B F 1
char c = stack.pop();
sum += getNumber(c) * Math.pow(16,mi);
mi++;
}
System.out.println(sum);
}
private static int getNumber(char c) {
//如果传入字符不是规定范围将进行报错
if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F') ){
throw new IllegalArgumentException("wrong char!");
}
if (c >= '0' && c<= '9'){
return c - '0';
}else {
return c - 'A' + 10;
}
}
}