1.情景展示
2进制如何转16进制?
16进制如何转成2进制?
2.具体分析
二进制:用0和1表示(最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小);
十六进制:10个阿拉伯数字(0~9)和6个英文字母(a~f)共计16个字符表示。
3.解决方案
二进制转十六进制
/*
* 二进制转十六进制
* @description:
* @date: 2022/4/1 16:11
* @param: binary 二进制
* @return: java.lang.String 16进制字符串
*/
@NotNull
public static String toHexString(String binary) {
if (StringUtils.isEmpty(binary) || binary.length() % 8 != 0) return "";
StringBuilder hex = new StringBuilder();
int iTmp;
for (int i = 0; i < binary.length(); i += 4) {
iTmp = 0;
for (int j = 0; j < 4; j++) {
iTmp += Integer.parseInt(binary.substring(i + j, i + j + 1)) << (4 - j - 1);
}
hex.append(Integer.toHexString(iTmp));
}
log.debug("二进制转十六进制:\n{}", hex);
return hex.toString();
}
十六进制转二进制
/*
* 十六进制转二进制
* @description:
* @date: 2022/4/1 15:03
* @param: hex 十六进制字符串
* @return: java.lang.String 二进制字符串
*/
@NotNull
public static String fromHexString(String hex) {
if (StringUtils.isEmpty(hex) || hex.length() % 2 != 0) return "";
StringBuilder binaryString = new StringBuilder();
String tmp;
for (int i = 0; i < hex.length(); i++) {
tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hex.substring(i, i + 1), 16));
binaryString.append(tmp.substring(tmp.length() - 4));
}
log.debug("十六进制转二进制:\n{}", binaryString);
return binaryString.toString();
}
测试
toHexString(fromHexString("2Facdfacdfbebb543531"));