目录
十进制转其他进制
/**
* 十进制转其他进制
*/
public static String conversion(Integer value, int sys) {
String code = "";
switch (sys) {
case 2:
code = Integer.toBinaryString(value);
break;
case 8:
code = Integer.toOctalString(value);
break;
case 16:
code = Integer.toHexString(value);
break;
default:
code = Integer.toString(value, sys);
break;
}
return code;
}
// 一个char[]对象
private static char[] array = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.toCharArray();
/**
* 十进制转其他进制2
*/
public static String conversion2(int number, int n) {
StringBuffer result = new StringBuffer("");
// 模拟计算进制的过程
while (number > 0) {
result.insert(0, array[number % n]);
number /= n;
}
return result.toString();
}
/**
* 补0
*/
public static String supplement(String a) {
// return String.format("%04d", a);
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < 4 - a.length(); i++) {
sb.append("0");
}
sb.append(a);
return sb.toString();
}
运行结果
public static void main(String[] args) {
System.out.println(conversion(21,16)); // 15
System.out.println(conversion2(21,16)); // 15
System.out.println(supplement("20")); // 0020
System.out.println(supplement("")); // 0000
}
其他进制数字转十进制
/**
* 其他进制数字转十进制
* @param number 数字字符串
* @param scale 数字字符串当前进制
* @return 十进制数字
*/
public static int scale2Decimal(String number, int scale) {
checkNumber(number);
if (2 > scale || scale > 32) {
throw new IllegalArgumentException("scale is not in range");
}
// 不同其他进制转十进制,修改这里即可
int total = 0;
String[] ch = number.split("");
int chLength = ch.length;
for (int i = 0; i < chLength; i++) {
total += Integer.parseInt(ch[i]) * Math.pow(scale, chLength - 1 - i);
}
return total;
}
public static void checkNumber(String number) {
String regexp = "^\\d+$";
if (null == number || !number.matches(regexp)) {
throw new IllegalArgumentException("input is not a number");
}
}
测试运行:
System.out.println(scale2Decimal("15",16)); // 21
字符串与16进制相互转换
/**
* 字符串转换成为16进制
*/
public static String strToHexadecimal(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
}
return sb.toString().trim();
}
/**
* 16进制直接转换成为字符串
*/
public static String hexadecimalToStr(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
运行结果:
public static void main(String[] args) {
System.out.println(strToHexadecimal("AW的想法jcd12345")); // 4157E79A84E683B3E6B3956A63643132333435
System.out.println(hexadecimalToStr(strToHexadecimal("AW的想法jcd12345"))); // AW的想法jcd12345
}