2012-05-28 5 views
1

Possible en double:
Convert a string representation of a hex dump to a byte array using Java?Convertir chaîne Bytes en Java

Je suis un MD5 chaîne

de70d4de8c47385536c8e08348032c3b 

et j'ai besoin comme l'octet Valeurs

DE 70 D4 DE 8C 47 38 55 36 C8 E0 83 48 03 2C 3B 

Ceci devrait être similaire à la fonction Perls pack("H32);.

+1

Vous voulez transformer la chaîne de ceci: 'de70d4de8c47385536c8e08348032c3b' à ceci:' DE 70 D4 DE 8C 47 38 55 36 C8 E0 83 48 03 2C 3B'? – npinti

+0

Presque, je ne veux pas que cela soit vu comme la chaîne dans un fichier texte, mais comme les octets. – Moritz

+0

Pouvez-vous écrire un test unitaire? Je n'ai aucune idée des types de données que vous voulez dire. – nes1983

Répondre

1

Il y a plusieurs façons de le faire. Voici un:

public static void main(String[] args) { 

    String s = "de70d4de8c47385536c8e08348032c3b"; 

    Matcher m = Pattern.compile("..").matcher(s); 

    List<Byte> bytes = new ArrayList<Byte>(); 
    while (m.find()) 
     bytes.add((byte) Integer.parseInt(m.group(), 16)); 

    System.out.println(bytes); 
} 

Sorties (-34 == 0xde):

[-34, 112, -44, -34, -116, 71, 56, 85, 54, -56, -32, -125, 72, 3, 44, 59] 
2

En boucle sur le String et utiliser la fonction Byte.decode(String) pour remplir un tableau d'octets.

+0

Par exemple '" de "' n'est pas analysable par 'Byte.decode' donc je ne le fais pas Je pense que ça marcherait. – dacwe

+0

Vous devez mettre "0x" comme préfixe. –

+0

Toujours ne fonctionnerait pas ... – dacwe

1

non vérifiées:

String md5 = "de70d4de8c47385536c8e08348032c3b"; 
byte[] bArray = new byte[md5.length()/2]; 
for(int i = 0, k = 0; i < md5.lenth(); i += 2, k++) { 
    bArray[k] = (byte) Integer.parseInt(md5[i] + md5[i+1], 16); 
}