W języku Java, w jaki sposób szesnastkowa reprezentacja ciągów bajtów (np. "1e") może zostać przekonwertowana na wartość bajtową?Konwertuj ciąg szesnastkowy na bajt w języku Java
Na przykład:
byte b = ConvertHexStringToByte("1e");
W języku Java, w jaki sposób szesnastkowa reprezentacja ciągów bajtów (np. "1e") może zostać przekonwertowana na wartość bajtową?Konwertuj ciąg szesnastkowy na bajt w języku Java
Na przykład:
byte b = ConvertHexStringToByte("1e");
Integer.parseInt(str, 16);
Próbowałem, ale to tworzy int, nie bajt - więc dla "1e" otrzymam 30, a nie 0x1e, nawet jeśli będę rzutował na bajt. – phpscriptcoder
Jak można odróżnić bajt o wartości 30 i 0x1e, które są przechowywane identycznie po bajcie typu? –
@phpscriptcoder: Nie, dostaniesz 1e. Spróbuj tego: String roundtrip = Integer.toHexString (Integer.parseInt (str, 16)); – erickson
Byte.parseByte
zwróci byte
przez parsowania reprezentację ciąg.
Stosując metodę z podpisu (String, int)
, Radix można określić jako 16, więc można analizować szesnastkowy reprezentację bajt:
Byte.parseByte("1e", 16);
Niebezpieczeństwo! Ta metoda nie przeanalizuje wartości ujemnych bajtów, na przykład "AD". Zobacz http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307. Lepiej używać Integer.parseInt –
@Dave L. To nie jest poprawne, ponieważ według ewaluatora: Dana metoda zachowuje się dokładnie tak, jak określono. W przypadku tej metody wartość ujemna musi być wskazana za pomocą znaku minus "-" i nie należy ustawiać bit znaku, ponieważ bit wyższego rzędu ma wartość jeden. Innymi słowy, dla podstawy 16 poprawne łańcuchy mają zakres od "-80" (-128) do "7f" (127); Baza "AD" 16 jest dodatnia 173, która jest poza zakresem. – Caner
@LAS_VEGAS Rzeczywiście Bajt.parseByte działa jak podano, jednak jeśli ktoś chce przekonwertować 2-znakową reprezentację szesnastkową 8-bitowej wartości do odpowiedniego bajtu, jak sugeruje to pytający, to ta metoda (jak określono i zaimplementowana!) nie rób tego dla wartości, w których bit wyższego rzędu wynosi 1. –
Można użyć Byte.parseByte("a", 16);
ale to działa tylko dla wartości do 127, wartości wyższe wtedy, że będzie musiał oddać do bajta, ze względu na podpisanych/niepodpisanych kwestii więc polecam do przeniesienia go do int a następnie wrzucił go do bajt
(byte) (Integer.parseInt("ef",16) & 0xff);
: Dlaczego '& 0xff'? –
& 0xff służy do uzyskania wartości uns. Int. – JCasso
To powinna być zaakceptowana odpowiedź! Dokładnie to, czego potrzebowałem! – VikingPingvin
So jakie jest Twoje pytanie? Jeśli w ogóle? – EJP
To było dobre pytanie. Dlaczego został zamknięty? – Joe