2016-08-05 45 views
0

Ich bin auf der Suche nach einer JavaUtil-Klasse, wenn bereits verfügbar, um die Byte [] -Array in HexString mit Bindestrichen zu konvertieren. Ich schaute mich um und konnte für diese Art von Problem keinen finden.konvertieren Byte [] Array von MySQL in Hex mit Bindestrichen in Java?

Hier ist mein Szenario:

Byte [] Array in MySQL gespeichert ist, als here erläutert.

so, wenn ich

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; 

laufen ich

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

Sie schnell merken, dass hex_dashes Version hexi Zeichenfolge neu geordnet wird (suchen Sie nach 22E1 nach dem 2. Strich in hex_dashes ist der Start Kette Wie diese Umlagerung durchgeführt wird, wird in dem oben verlinkten Artikel erläutert.

In der obigen Abfrage lautet der ID-Typ byte[].

Jetzt möchte ich eine Java-Util-Funktion, die Hexadezimal-Zeichenfolge angegebene Byte [] -Array zurückgeben.

Ich habe diese Methode, die Hexi, aber nicht Hex_string zurückgibt.

static final String HEXES = "ABCDEF"; 

    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(); 
    } 

Ich frage mich, ob es eine Möglichkeit, die ich hex mit Bindestrichen bekommen konnte.

Dank

Antwort

1

Sie können folgende util-Methode verwenden:

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)); 
} 

Es ist die rohe byte[] nimmt, wandelt sie in die hexi und fügt nur den entsprechenden Teil aus der berechneten Zeichenfolge zwischen den Bindestrichen . Wenn Sie die Hex-Zeichenfolge bereits für die vorherige Verwendung berechnet haben, wäre es schneller, diese als Parameter hex zu verwenden. Sie könnten auch die Zeichenfolge Konkation statt String.format(...) verwenden.