进制转换
一、字符类型转成二进制
//将字符转化成二进制
public static String strToBinary(String str){
char[] strChar=str.toCharArray();
String result="";
for(int i=0;i<strChar.length;i++){
result +=Integer.toBinaryString(strChar[i])+ " "; //这里将每个字符转成的二进制用空格隔开,因为当你需要从二进制转成字符的时候用到
}
return result;
}
二、将十六进制的字符串转成二进制字符串
//将十六进制的字符串转成二进制字符串
//如:十六进制字符串为:“011” 转成二进制字符串为:“10001”
public static String HexstrToBinary(String str){
String result ="";
String charHex = "";
int charHexLen = 0;
for(int i=0;i<str.length();i++){
charHex = Integer.toBinaryString(Integer.parseInt(str.substring(i,i+1),16));
charHexLen = charHex.length();
//这里进行补0操作,如:十六进制的6对应的是 0110,但使用Integer.parseInt得到的是 110,所以这里进行了补 0 操作
for(int j = 0; j < 4 - charHexLen;j++){
charHex = "0" +charHex;
}
result = result +charHex;
}
return result;
}
//将十六进制的字符串转成十进制的long类型数字
//这里采用的是位运算,先将十六进制转成二进制,再通过位运算转成十进制;当然这里耶可以直接通过16进制
//的位运算直接转成十进制。这里进行计算的时候没有用到 Math类中的pow()函数、也没使用BigDecimal
//函数;其实我之前是准备使用 pow()函数的,但转成二进制后太长,指数达到了二十多,超过了double的
//最大取值;multiplier *multiplicand ^(n)
public static long HexstrToDecimalism(String str){
String binarystr = HexstrToBinary(str);
char [] binarys = binarystr.toCharArray();
long result = 0;
int multiplier = 0; //乘数
int multiplicand = 0; //被乘数
for(int i = 0; i < binarys.length;i++){
multiplier = binarys[i] - 48; //这里为什么要减48呢?提示一下看binarys的数据类型
multiplicand = 2<<(binarys.length-(i+1)-1);
if(i == (binarys.length-1)){
multiplicand = 1;
}
result = result + multiplier*multiplicand;
}
return result;
}
总结:对于进制转换除了十六进制转二进制麻烦了一点,其它的感觉都还行;最最最主要的是不要将数据类型弄混了,这是我刚刚犯过的坑,0101 和“0101” 是不同的,特别要注意,有时候绕晕了就会犯这样的错