2 Stimmen

Wie konvertiert man Hex in Byte für das folgende Programm?

public static String asHex (byte buf[]) {
    StringBuffer strbuf = new StringBuffer(buf.length * 2);
    int i;

    for (i = 0; i < buf.length; i++) {
        if (((int) buf[i] & 0xff) < 0x10)
            strbuf.append("0");

        strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
    }

    return strbuf.toString();
}

3voto

paxdiablo Punkte 809679

Hier ist ein vollständiges Programm, das die asBytes()-Funktion enthält, die wahrscheinlich das ist, wonach Sie gesucht haben, das Gegenteil zu asHex():

public class Temp {
    public static String asHex (byte buf[]) {
        StringBuffer strbuf = new StringBuffer(buf.length * 2);
        int i;
        for (i = 0; i < buf.length; i++) {
            if (((int) buf[i] & 0xff) < 0x10)
                strbuf.append("0");
            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
        }
       return strbuf.toString();
    }
    public static byte[] asBytes (String s) {
        String s2;
        byte[] b = new byte[s.length() / 2];
        int i;
        for (i = 0; i < s.length() / 2; i++) {
            s2 = s.substring(i * 2, i * 2 + 2);
            b[i] = (byte)(Integer.parseInt(s2, 16) & 0xff);
        }
        return b;
    }
    static public void main(String args[]) {
        byte[] b = Temp.asBytes("010203040506070809fdfeff");
        String s = Temp.asHex(b);
        System.out.println (s);
    }
}

1voto

Zach Scrivena Punkte 28381

Um eine hexadezimale Zeichenfolgen-Repräsentation eines Byte-Arrays zu erhalten, können Sie String.format() mit dem %X Formatanweiser verwenden:

public static String asHex(byte buf[]) 
{
    StringBuffer strbuf = new StringBuffer(buf.length * 2);

    for (byte b : buf)
       strbuf.append(String.format("%02X", b));

    return strbuf.toString();
}

Die folgende Methode führt die Umkehrung aus, indem sie eine Byte-Array-Repräsentation einer hexadezimalen Zeichenfolge zurückgibt. Sie verwendet Byte.parseByte() und einige Bit-Verschiebungen, um zwei Zeichen in einem Byte zu erhalten:

public static byte[] asBytes(String str)
{
    if ((str.length() % 2) == 1) str = "0" + str; // führende 0 auffüllen, falls nötig
    byte[] buf = new byte[str.length() / 2];
    int i = 0;

    for (char c : str.toCharArray())
    {
        byte b = Byte.parseByte(String.valueOf(c), 16);
        buf[i/2] |= (b << (((i % 2) == 0) ? 4 : 0));
        i++;
    }

    return buf;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X