十六进制和十进制互换:
十进制转化成十六进制基本逻辑:十进制数 / 16,然后反取余数
取的余数又分两种情况:余数0-9和10-15
第一种:比如98 / 16 商 6 余 2
String hex = ""; 余数拼接的时候,把求的余数往前拼接
hex = temp + hex ==> hex = 2 + ""; ==> hex = 6 + 2; ==> 62
第二种:先把余数转化成字符,然后在拼接
先减一个10,在加字符'A',因为这个是10往后的,也不知道是A后面的第几个
所以就先减一个10,就只取个位数了,最后在强制转化成char型,在往前拼接
hex = (char)(temp - 10 + 'A') + hex;
十六进制转化成十进制基本逻辑:每一位数字都要乘它的权减n-1次方, n为当前位数
6E -> 6 * 16 + 14 * 1
需要先遍历字符串,把输入的十六进制当成字符串数组处理
for(int i = 0;i < hex.length();i++){
Char tempChar = hex.charAt(i);
}
从左往右遍历
比如hex = 6E,访问的时候先访问6,i = 0,相当于是倒过来就是数组长度- 1 - i
这是一个规律,即如果数组中首元素下标为i,那么最后一个元素的下标为len- 1 - i
同样两种情况:'0'-'9' 'A'-'F'
if(tempChar >= '0' && tempChar <= '9'){
decNum +=(tempChar - '0') * Math.pow(16, hex.length()- 1 - i);
//某一个字符,我也不知道这个是几,反正是从0开始的,求和0之间的差值就知道是算术的几了,变整型
如果不减,它就是字符类型
}else if(tempChar >= 'A' && tempChar <='F'){
decNum +=(tempChar - 'A' + 10) * Math.pow(16, hex.length()- 1 - i);
}//同理就是先求和A之间的差值就知道是算术的几了,在把10加回来,变成整型的数字
import java.util.Scanner;
public class HexToDecimlDemo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整型数字:");
int decNum = input.nextInt();
System.out.println("十进制转换为十六进制:" + decToHex(decNum));
System.out.println( "十六进制转换为十进制:"+ hexToDec(decToHex(decNum)));
input.close();
}
public static int hexToDec(String hex){
int decNum = 0;
for (int i = 0; i < hex.length(); i++) {
char tempChar = hex.charAt(i);
if(tempChar >= '0' && tempChar <= '9'){
decNum +=(tempChar - '0') * Math.pow(16, hex.length()- 1 - i);
}else if(tempChar >= 'A' && tempChar <='F'){
decNum +=(tempChar - 'A' + 10) * Math.pow(16, hex.length()- 1 - i);
}
}
return decNum;
}
public static String decToHex(int decNum ){
String hex = "";
while(decNum != 0){
int temp = decNum % 16;
if(temp >=0 && temp <= 9){
hex = temp + hex;
}else if(temp >= 10 && temp <=15){
hex =(char)(temp - 10 + 'A' )+ hex;
}
decNum /= 16;
}
return hex;
}
}