繁体   English   中英

将字节[]数组从MySQL转换为Java中带破折号的十六进制?

[英]convert byte[] array from MySQL into hex with dashes in java?

我正在寻找一个JavaUtil类,如果该类已经可以将byte []数组转换为带有破折号的hexString 我环顾四周找不到此类问题。

这是我的情况:

byte []数组被存储在MySQL作为解释这里

所以当我跑步

select HEX(id) as hexi, (
 insert(
   insert(
     insert(
       insert(
         hex(
           concat(substr(id,5,4),substr(id,3,2),
                  substr(id,1,2),substr(id,9,8))
         ),
         9,0,'-'),
     14,0,'-'),
   19,0,'-'),
 24,0,'-')
) as hex_dashes from my_table;

我懂了

hexi                                              hex_dashes
22E179345A5C11E69A64F9BBBC7C3AAC  5A5C11E6-7934-22E1-9A64-F9BBBC7C3AAC

您会很快注意到hex_dashes是hexi字符串的重排版本(hex_dashes中的第二个破折号是hexi的起始字符串后,请查找22E1。如何完成重排已在上面链接的文章中进行了说明)。

在上面的查询中,id类型是byte[]

现在,我想要一个Java Util函数返回给定byte []数组的hex_dashes字符串。

我有此方法返回hexi但不返回hex_string。

static final String HEXES = "0123456789ABCDEF";

    public static String byteArrayToHexString( byte [] raw ) {
        if ( raw == null ) {
            return null;
        }
        final StringBuilder hex = new StringBuilder( 2 * raw.length );
        for ( final byte b : raw ) {
            hex.append(HEXES.charAt((b & 0xF0) >> 4))
                    .append(HEXES.charAt((b & 0x0F)));
        }
        return hex.toString();
    }

我想知道是否有什么办法可以让我用破折号变成十六进制。

谢谢

您可以使用以下util-method:

static String hexDashes(byte[] raw) {
        final String hex = byteArrayToHexString(raw);
        return String.format("%s-%s-%s-%s-%s", hex.substring(8, 16), hex.substring(4, 8), hex.substring(0, 4), hex.substring(16, 20), hex.substring(20, 32));
}

它使用原始byte[] ,将其转换为hexi,并仅将计算出的字符串中相应的子字符串插入破折号之间。 如果您已经计算出hex-String供先前使用,则将其用作参数hex会更快。 您也可以使用字符串混叠代替String.format(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM