Ist dies der beste Weg, um zu konvertieren hex-String zu Byte?
Ist dies der beste Weg, um zu konvertieren hex-String zu Byte?
Oder kannst du mir eine kürzere/einfachere?
public static byte[] hexToBytes(String hex) {
return hexToBytes(hex.toCharArray());
}
public static byte[] hexToBytes(char[] hex) {
int length = hex.length / 2;
byte[] raw = new byte[length];
for (int i = 0; i < length; i++) {
int high = Character.digit(hex[i * 2], 16);
int low = Character.digit(hex[i * 2 + 1], 16);
int value = (high << 4) | low;
if (value > 127)
value -= 256;
raw[i] = (byte) value;
}
return raw;
}
- Brito: Was sind Ihre Anforderungen? In meinem Buch "3ED" ist eine durchaus gültige "hexstring" noch Ihr Programm nicht funktioniert auf so ein string. Was ist mit "0x3ED"? (Ihr Programm nicht funktioniert, weder in diesem Fall später).
- eigentlich ist es nicht meine <java2s.com/Code/Java/Development-Class/ConverthexToBytes.htm>. Aber, in meiner Anwendung, Ihre hex-Wert generiert, als "0x03ED" (der hex-Wert wird immer dann erzeugt, niemals direkt eingegeben). Vielen Dank für dieses vergessen, sowieso.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"0001"
verwandelt sich in ein byte, in der Erwägung, dass es zumutbar wäre, die Umwandlung in zwei.Brauchen Sie nicht die Subtraktion von 256, wenn der Wert größer als 127. Nur cast wird der Wert in ein byte. Zum Beispiel
byte b = (byte) 255
weist einen Wert von -1 bisb
.Eine einschränkende Konvertierung auf integer-Typen einfach verwirft die high-order bits, die passen nicht in den Zieltyp.
Leider mit
BigInteger
fällt aus, wenn führende null-bytes.Ich denke, deine ursprüngliche Ansatz ist ein guter Anfang. Ich habe ein paar tweaks:
Beachten Sie, dass
Character.digit
ist nur in Java 7, und es nicht bestätigen, dass die bereitgestellten Zeichen-ist innerhalb des erwarteten Bereichs. Ich mag zu werfen Ausnahmen, wenn Eingabedaten nicht meinen Erwartungen entsprechen, so habe ich Hinzugefügt, dass.Hier sind einige grundlegende unit-tests:
Der einfachste Weg: