Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    [JAVA] da byte[] a String

    Salve a tutti.

    Ho un byte[] vect = {0x45, 0x55, 0x52, 0x00} e da questo vorrei ottenere una String con il valore "EUR " da salvare poi in un file.

    0x45 = E
    0x55 = U
    0x52 = R
    0x00 = carattere vuoto

    Come devo fare? Ci sto sbattendo la testa da un bel po'!

    Ciao e grazie
    Sandro

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Puoi fare così:
    codice:
    String hexByteToString(byte[] hexByte) {
      for(int i=0; i<hexByte.length; i++) {
        hexByte[i] = Byte.parseByte(""+hexByte[i],10);
      }
    	
      String str = new String(hexByte);
      return str;
    }
    l'operazione di concatenamento se l'array diventa lungo diventa dispendiosa. ^^

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] da byte[] a String

    Originariamente inviato da DarthSandr
    Ho un byte[] vect = {0x45, 0x55, 0x52, 0x00} e da questo vorrei ottenere una String con il valore "EUR "

    Come devo fare?
    String s = new String(vect, "US-ASCII");

    Le uniche cose sono: 1) tecnicamente questo costruttore può lanciare UnsupportedEncodingException (eccezione checked) ma tanto US-ASCII è sicuramente gestito. 2) Se nel buffer hai il nullo, te lo ritrovi anche nel String e dovresti eliminarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    Re: Re: [JAVA] da byte[] a String

    Originariamente inviato da andbin
    String s = new String(vect, "US-ASCII");

    Le uniche cose sono: 1) tecnicamente questo costruttore può lanciare UnsupportedEncodingException (eccezione checked) ma tanto US-ASCII è sicuramente gestito. 2) Se nel buffer hai il nullo, te lo ritrovi anche nel String e dovresti eliminarlo.
    Cioè, io ho scritto 8 righe e poi bastava questo? lol

    Ho imparato qualcosa di nuovo anche oggi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    entrambe funzionano! Grazie a tutti

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da DarthSandr
    entrambe funzionano! Grazie a tutti
    Sì ma la prima è molto inutile/superflua.

    hexByte[i] = Byte.parseByte(""+hexByte[i],10);

    Se hexByte[i] vale 69 (la "E"), prima crea, per concatenazione, una stringa "69" e poi la riparsa in base 10 e riottiene 69. Che serve??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    hexByte[i] = Byte.parseByte(""+hexByte[i],10);

    Se hexByte[i] vale 69 (la "E"), prima crea, per concatenazione, una stringa "69" e poi la riparsa in base 10 e riottiene 69. Che serve??
    L'array contiene comunque numeri esadecimali; io ho pensato di concatenarlo ed ottenere quindi "0x45" (la 'E'), e successivamente operare la conversione in decimale, ed ottenere quindi 69.
    Quindi se concateno un numero hex ad una stringa ottengo direttamente il carattere? Non avevo pensato che la base di numerazione non influisce...

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    L'array contiene comunque numeri esadecimali
    No, il "esadecimale" o il "ottale" o anche proprio il "decimale" sono solo rappresentazioni del valore. Un byte sono 8 bit. Punto.
    Quindi dire che "un array di byte contiene numeri esadecimali" non è appropriato .... anzi, vuol dire ben poco.

    Originariamente inviato da Patrick Jane
    io ho pensato di concatenarlo ed ottenere quindi "0x45" (la 'E')
    No. Nella concatenazione delle stringhe, se uno degli operandi è un primitivo numerico, comunque, in ogni caso viene fornita la rappresentazione in stringa del valore decimale.

    Quindi se hexByte[i] contiene 8 bit 01000101 (o 69 in decimale o 45 in esadecimale o 105 in ottale), la stringa concatenata è "69". Punto.

    Originariamente inviato da Patrick Jane
    Quindi se concateno un numero hex ad una stringa ottengo direttamente il carattere?
    Anche questo non vuol dire nulla ....

    Mi spiace ma questi sono concetti essenziali, super-basilari sui sistemi di numerazione e sulle conversioni. Non centrano nulla con Java direttamente .... e se hai già dubbi su queste cose forse è meglio fare (molti) passi indietro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.