Java:将十六进制字节数组转换为16个固定长度的二进制字符串



我有一个通过自动MYBATIS转换获得的字节数组。在ORACLE DB列(RAW类型(中,我有HEX值(例如:0x0、0x81、0xC801(。此值最多存储2个字节(例如1100100000000001->0xC80110000000000000000->0x0(

我在读取和转换此值时遇到问题。

我需要将自动转换得到的字节数组转换为16个固定长度的二进制字符串。

例如,如果DB中的值是0x0

  • 字节数组为[0](自动MYBATIS转换(
  • 我需要的二进制字符串必须是0000000000000000

例如,如果DB中的值为0xC801

  • 字节数组为[0,-56,1](自动MYBATIS转换(
  • 我需要的二进制字符串必须是1100100000000001

我该怎么做?

我尝试了这个解决方案,但不能使用像0x0或0x81这样的HEX值,因为0x0被映射到"0";0";并且0x81被映射到"0";100000001";。缺少0填充。。。我不知道如何在这个脚本中添加填充。

private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
public static String bytesToBinary(byte[] bytes) {
return hexToBin(bytesToHex(bytes));
}
public static String hexToBin(String s) {
if (StringUtils.isNotEmpty(s)) {
return new BigInteger(s, 16).toString(2);
}
return "";
}
public static String bytesToHex(byte[] bytes) {
if (bytes != null && bytes.length > 0) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}
return "";
}

尝试使用BigInteger

byte[] bytes = {0, -56, 1};

// array, offset, length 
String result = new BigInteger(bytes).setBit(16).toString(2).substring(1);
System.out.println(result);

打印

1100100000000001

最新更新