745 votes

Convertir du tableau d’octets en chaîne en java de sortilège

Encore une fois, j’ai quelques problèmes avec des tableaux de nombres, de java et d’octets hexadécimales. J’ai maintenant un tableau d’octets rempli de nombres hexadécimaux et imprimant la manière simple est assez inutile, car il y a beaucoup d’éléments non imprimables. Ce que j’ai besoin est l’hexadécimal exacte sous forme de : 3a5f771c...

Et je n’ai aucune idée de comment faire pour convertir le tableau d’octets en une chaîne comme ceci. C’est tout en Java.

1008voto

maybeWeCouldStealAVan Points 5467

De la discussion ici, et surtout cette réponse, c'est la fonction que j'utilise actuellement:

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}

Mon petit repères (un million d'octets d'un millier de fois, 256 octets de 10 millions de fois) ont montré qu'il est beaucoup plus rapide que n'importe quel autre, environ la moitié du temps sur le long de tableaux. Par rapport à la réponse je l'ai pris de, le passage à la bit-à-bit de la fpo --- comme il est suggéré dans la discussion --- réduire d'environ 20% du temps pour les longs tableaux. (Edit: Quand je dis que c'est plus rapide que les autres solutions, je veux dire le code alternatif offert dans les discussions. La Performance est l'équivalent de Communes Codec, qui utilise le même code.)

497voto

chooban Points 2851

Si vous n’êtes pas opposé à des bibliothèques supplémentaires, la bibliothèque de codec communes a une classe pour faire juste cela.

...

Je l’ai utilisé ce matin dans un projet personnel.

342voto

PhoneixS Points 875

Utiliser DatatypeConverter.printHexBinary(). Vous pouvez lire sa documentation http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/DatatypeConverter.html

Par exemple:

byte bytes[] = {(byte)0, (byte)0, (byte)134, (byte)0, (byte)61};
System.out.println(javax.xml.bind.DatatypeConverter.printHexBinary(bytes));

Permettra:

000086003D

Comme vous pouvez le voir cela permettra de récupérer le code hexadécimal de la chaîne de caractères représentant le tableau d'octets avec des zéros.

Cette réponse est essentiellement la même que dans la question En Java, comment puis-je convertir un tableau d'octets en une chaîne de chiffres hexadécimaux, tout en gardant les zéros non significatifs?

267voto

Pointer Null Points 14229

Solution la plus simple, aucun libs externes, aucune constantes de chiffres :

46voto

everconfusedGuy Points 876

Cette simple oneliner fonctionne pour moi
``
EDIT - employer ceci va supprimer les zéros. Merci @Voicu pour le signaler

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X