2013-03-15 18 views

Odpowiedz

43

Trzeba spojrzeć na String.format() i specyfikacji Formatter.

np.

String.format("%02x", byteValue);

iterację tablicy i dołączyć do każdego String.format() wynik StringBuilder

+1

dziękuję, że działa! – hiii

+0

Ładne i proste. Nie ma potrzeby, aby przesiać przez ścianę tekstu na drugim duplikacie pytania i odpowiedzi :) – andrei

+1

to działa, ale trwa około 3 razy dłużej niż poniższa metoda oparta na operacjach bajtowych – darkled

0

Możesz użyć numeru Integer.toStringint i, int radix), aby przekształcić każdą z liczb na ciąg znaków w postaci szesnastkowej, a następnie połączyć je razem. Teraz musisz po prostu przenieść swoje bajty do int.

4

Jak o:

public static String bytesToHex(byte[] bytes) { 
    final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
    char[] hexChars = new char[bytes.length * 2]; 
    int v; 
    for (int j = 0; j < bytes.length; j++) { 
     v = bytes[j] & 0xFF; 
     hexChars[j * 2] = hexArray[v >>> 4]; 
     hexChars[j * 2 + 1] = hexArray[v & 0x0F]; 
    } 
    return new String(hexChars); 
} 

Source

+2

Wygląda jak skopiuj i wklej z duplikatu pytania. Powinieneś przynajmniej wspomnieć źródło, skąd je skopiowałeś. – MrSmith42

+3

ma link źródłowy jako część odpowiedzi – ant

+3

@ MrSmith42: Położyłem źródło pogrubioną czcionką dla ciebie;) – Burkhard

0

Patrz Integer jest toHexString. Konwertowanie Twojego byte do , a następnie uzyskanie wynikowego ciągu znaków powinno załatwić sprawę. Oczywiście, musiałbyś następnie połączyć łańcuchy z StringBuilder.

0

Jeśli ta tablica ma 4 bajty, prawdopodobnie można połączyć bajty i użyć metody Integer.toString (int, int).

byte[] array = /* initialization */; 
int x = 0; 
for (int i = 0, l = Math.min(array.length, 4); i < l; i++) { 
    x <<= 8; 
    x |= (array[i] & 0xFF); 
} 
String hex = Integer.toString(x, 16); 
45
public static String bytesToHex(byte[] in) { 
    final StringBuilder builder = new StringBuilder(); 
    for(byte b : in) { 
     builder.append(String.format("%02x", b)); 
    } 
    return builder.toString(); 
} 
1

Ta metoda powinna zrobić dla you..pass w tablicy bajtów jako parametr do powrotu ciąg szesnastkowy ...

private static String convertToHexString(byte[] data) { 
StringBuffer buf = new StringBuffer(); 
for (int i = 0; i < data.length; i++) { 
    int halfbyte = (data[i] >>> 4) & 0x0F; 
    int two_halfs = 0; 
    do { 
     if ((0 <= halfbyte) && (halfbyte <= 9)) 
      buf.append((char) ('0' + halfbyte)); 
     else 
      buf.append((char) ('a' + (halfbyte - 10))); 
      halfbyte = data[i] & 0x0F; 
     } while(two_halfs++ < 1); 
    } 
return buf.toString(); 
} 

nadzieję, że pomoże ..

0
import java.util.HashMap; 

public class NumUtil 
{ private static HashMap<Byte,char[]>byteToHex=new HashMap<Byte, char[]>(); 
    static 
    { for(int i=0;i<16;++i) 
      byteToHex.put((byte)i, new char[]{'0',Integer.toHexString(i).charAt(0)}); 
     for(int i=16;i<256;++i) 
      byteToHex.put((byte)i, Integer.toHexString(i).toCharArray()); 
    } 
    public static String toHexString(byte[]bytes) 
    { StringBuilder stringBuilder = new StringBuilder(bytes.length*2); 
     for(byte b:bytes) 
      stringBuilder.append(byteToHex.get(b)); 
     return stringBuilder.toString(); 
    } 
} 
Powiązane problemy