16进制与2进制字符串相互转换(java)
1:16进制转换为2进制字符串
public static String hexString2BinaryStr(String hexStr)
{
String binaryStr = Integer.toBinaryString(Integer.parseInt(hexStr, 16));
// 当通过jdk自带的类转换后的二进制位不足8位时我们需要在前面补0
int i = 8 - binaryStr.length();
if (i > 0)
{
for (int j = 0; j < i; j++)
{
binaryStr = "0" + binaryStr;
}
}
return binaryStr;
}
// 测试数据
public static void main(String[] args)
{
String hexStr = "80";
String res = hexString2BinaryStr(hexStr);
// 结果应为10000000
System.out.println(res);
}
2:2进制字符串转换为16进制字符串
/**
* 2进制字符串转换为16进制字符串
*
* @param binaryStr
* @return
*/
public static String binaryStr2HexString(String binaryStr)
{
int length = binaryStr.length();
StringBuilder res = new StringBuilder();
// 按照长度%4取余进行高位补零
int num = length % 4;
StringBuilder binaryStrBuilder = new StringBuilder(binaryStr);
for (int i = 0; i < num; i++)
{
binaryStrBuilder.insert(0, "0");
}
// 补全高位0的最终字符串
String resBinaryStr = binaryStrBuilder.toString();
for (int j = 0; j < resBinaryStr.length(); j += 4)
{
String substring = resBinaryStr.substring(j, j + 4);
String[] items = substring.split("");
// 已知items的长度为4,所以直接使用对应的数据进行计算
int sum = Integer.parseInt(items[0]) * 8 + Integer.parseInt(items[1]) * 4 + Integer.parseInt(items[2]) * 2
+ Integer.parseInt(items[3]);
//将4位2进制转换为1位16进制
String s = Integer.toHexString(sum);
res.append(s);
}
return res.toString();
}
// 测试数据
public static void main(String[] args)
{
String s = "00000101";
String res = binaryStr2HexString(s);
// 输出 05
System.out.println(res);
}
3:十进制整形数据转换为16位二进制(递归实现)
/**
* 十进制int类型数据转换为16位二进制数据
*
* @param i 传入参数
* @return
*/
public static byte[] int2Bytes(int i, int length, byte[] bytes)
{
int index = length - 1;
if (i == 0)
{
return bytes;
}
bytes[index] = (byte) (( i % 2 ) & 0xff);
int2Bytes(i /= 2, index, bytes);
return bytes;
}
/**
* test
*/
public static void main(String[] args)
{
int i = 10003;
byte[] param = new byte[16];
byte[] bytes = int2Bytes(i, 16, param);
System.out.println(Arrays.toString(bytes));
}
以上属于一个基本的实现,如果有更好用的方法欢迎分享!!