微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Java:将HEX字节数组转换为16个固定长度的二进制字符串

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

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

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

例如,如果数据库中的值为 0x0

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

例如,如果数据库中的值为 0xC801

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

我该怎么做?

我尝试使用此解决方案,但不适用于0x0或0x81之类的HEX值,因为0x0映射为“ 0”,而0x81映射为“ 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。