ďťż
 
byte array into hex string, hex string into byte array in java - jak najprościej ? ďťż
 
byte array into hex string, hex string into byte array in java - jak najprościej ?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

byte array into hex string, hex string into byte array in java - jak najprościej ?



Filip Sielimowicz - 03-06-2006 00:15
byte array into hex string, hex string into byte array in java - jak najprościej ?
  Przy konwersjach byte[] na zapis szesnastkowy generalnie używałem
klasy BigInteger:

String byteArrayToHexString(byte[] myHexBytes) {
return new BigInteger(myHexBytes).toString(16);
}

Konwersja odwrotna jest równie trywialna:

byte[] hexStringToByteArray(String hexString) {
return new BigInteger(hexString, 16).toByteArray();
}

Ale to ma jedną wadę: BigIntegery są zapisane ze znakiem,
więc przy konwersji na hex string pojawiają się
ujemne liczby szesnastkowe, np. -7af34b
żeby tego uniknąć korzystam z innego konstruktora BigInteger,
w którym jawnie podaje się znak:

String byteArrayToHexString(byte[] myHexBytes) {
BigInteger unsignedBI = new BigInteger(1, myHexBytes);
return unsignedBI.toString(16);
}

Sprawa prosta, ale ... nie widzę tu prostej procedury symetrycznej ...
Dla liczb ujemnych konwersja z powrotem ze Stringa na byte[] daje
tablicę dłuższą o jeden bajt, z zerem na początku.

Jest gorzej ... Jeśli chcę to wykorzystać np. w podpisach elektronicznych
to generalnie musę założyć, że w tablicy wejściowej mogę mieć np. same zera.
Konwersja na BigInteger'a wszystko mi tu poucina wszystkie najstarsze zera.

Czyli generalnie pytanie brzmi: czy muszę pisać sam te konwersje,
czy widzicie w standardowych bibliotekach javy już coś, co mi takie stringi
wygeneruje i skonwertuje symetrycznie, zachowując wszelkie zera i nie
kombinując nic ze znakami ? Jakiś NumberFormatter już może jest albo co ?





Piotr Kobzda - 06-06-2006 00:56
=?ISO-8859-2?Q?Re=3A_byte_array_into_hex_string=2C_h?==?ISO-8859-2?Q?ex_string_into_byte_array_in_java_-_jak_?==?ISO-8859-2?Q?najpro=B6ciej_=3F?=
  Filip Sielimowicz wrote:

> Czyli generalnie pytanie brzmi: czy muszę pisać sam te konwersje,
> czy widzicie w standardowych bibliotekach javy już coś, co mi takie stringi
> wygeneruje i skonwertuje symetrycznie, zachowując wszelkie zera i nie
> kombinując nic ze znakami ? Jakiś NumberFormatter już może jest albo co ?

AFAIK czegoś prostszego od BigDecimal w API raczej nie ma, trzeba to co
podałeś tylko lekko rozwinąć:

public static String byteArrayToHexString(byte[] a) {
return new BigInteger(1, a)
.setBit(a.length << 3).toString(16).substring(1);
}

public static byte[] hexStringToByteArray(String s) {
byte[] a = new BigInteger(s, 16).abs()
.setBit(s.length() << 2).toByteArray();
byte[] r = new byte[a.length - 1];
System.arraycopy(a, 1, r, 0, r.length);
return r;
}

Niestety zbyt piękne to to nie jest... :/

Jeśli możesz pozwolić sobie na dodatkową bibliotekę to np. w Apache
Commons masz org.apache.commons.codec.bin.Hex z encodeHex() i
decodeHex(), z którymi będzie prościej (BTW -- Commons też przydać Ci
się może jeśli nagle stwierdzisz, że base64 bardziej niż hex jest Ci
jednak potrzebny...).

Choć IMHO najlepiej jednak jest napisać to sobie wykorzystując np.
forDigit() i digit() z Character, kilka raptem linijek kodu więcej, a
masz to co Ci potrzebne, zawsze do dopieszczenia jakby coś nie grało.

Oczywiście możesz też skorzystać z Google. :)
Ot choćby pierwszy hit dla "java hex string" parę alternatywnych
rozwiązań podaje:
http://mindprod.com/jgloss/hex.html

piotr
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?ISO-8859-2?Q?Re=3A_Informatyka=2C_Java=2C_EJB=2C_Ajax=2C?== ?ISO-8859-2?Q?_Spring=2E_Czy=BFby_to_koniec_=B6wiata=2C_czy? ==?ISO-8859-2?Q?_te=BF_nasze_uczelnie_b=EAd=B1_uczy=B3y_w_k?== ?ISO-8859-2?Q?o=F1cu!_czego_praktyczne?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= I spotkanie Warszawskiej Grupy Użytkowników Technologii Java (Warszawa-JUG) Przechodzenie FoxPro DBF -> Java most JDBC-ODBC - jak zrealizować RLOCK ? Re: Projekty JSP, PHP, Java, SQL, C i C++ na zaliczenie!! Skrypt zapisujacy formularz do pliku txt - java Re: java 5-10 razy wolniejsza od php Pomoc Pilnie potrzebna!!! JAVA testy Wysylanie zakladek z programu Java do Worda [ORACLE] Java Stored Procedures + JDBC
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sulimczyk.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com