Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Da Stringa in Esadecimale e Viceversa

    Ciao a tutti ... spero di aver postato nella sezione giusta (se così non fosse me ne scuso anticipatamente )

    Vorrei porvi un quesito o meglio chiedervi quale miglior scelta potrei fare per creare del codice per questo caso:


    Ho una stringa supponiamo "Pippo"

    dovrei ottenerne la rappresentazione esadecimale in un array di byte
    io ho provato con questo codice:

    String idCliente = "Pippo";
    byte writeBuffer []= idCliente.getBytes();
    for ( int i = 0; i < writeBuffer.length; i++ )
    System.out.println(writeBuffer[i]);

    il risultato è :
    P = 80
    i = 105
    p = 112
    p = 112
    o = 111

    ma in realtà a me servirebbe in esadecimale (Attenzione non a Stringa ma sempre in array di byte) così:

    P = 50
    i = 69
    p = 70
    p = 70
    o = 6F

    La stessa cosa dovrei farla nel senso inverso ovvero da esadecimale in stringa

    Qualcuno è così gentile da aiutarmi per cortesia ... Grazie a tutti

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

    Re: Da Stringa in Esadecimale e Viceversa

    Originariamente inviato da SHARKSEAL
    ma in realtà a me servirebbe in esadecimale

    La stessa cosa dovrei farla nel senso inverso ovvero da esadecimale in stringa
    La classe Integer ha i metodi toString() e parseInt() a cui si può specificare un "radix" (nel tuo caso è 16) e inoltre ha uno specifico toHexString().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Siccome io sono obbligato a memorizzare il risultato in un array di byte ... i metodi che mi hai citato mi permettono di fare questo ???


    Grazie cmq per la tua disponibilità!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SHARKSEAL
    Siccome io sono obbligato a memorizzare il risultato in un array di byte
    No alt, fammi capire. Perché un array di byte di per sé non centra nulla con l' "esadecimale".

    Se nella stringa di partenza hai una "P", nell'array di byte cosa vuoi avere?

    - 1 byte con valore decimale 80 (0x50 in esa) ? Questo te lo dà già il getBytes()!!
    - 2 byte con valori 5 e 0? Oppure 0x35 (in ASCII '5') e 0x30 (in ASCII '0') ?
    - altro di ancora più strano?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Allora mi spiego meglio :


    Prendendo in considerazione la stringa "Pippo"

    Il risultato deve essere : byte writeBuffer[] contenete i valori esadecimali della stringa "Pippo"

    Praticamente writeBuffer [0] = 50 (esadecimale)
    writeBuffer [1] = 69
    ecc...
    ecc...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SHARKSEAL
    Prendendo in considerazione la stringa "Pippo"

    Il risultato deve essere : byte writeBuffer[] contenete i valori esadecimali della stringa "Pippo"

    Praticamente writeBuffer [0] = 50 (esadecimale)
    writeBuffer [1] = 69
    ecc...
    ecc...
    Te lo fa già getBytes()!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Potresti dirmi come ??? magari nel mio esempio... e conosci anche il metodo inverso per ottenere dall'array di byte di nuovo la stringa


    Grazie sei gentilissimo comunque ...

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SHARKSEAL
    Potresti dirmi come ???
    Ma forse non hai ancora capito .... non ha senso dire "byte in esadecimale" !!

    Un byte è un byte .... sono 8 bit. Secondo il codice ASCII la "P" in binario è 01010000.
    Che in decimale è 80, in esadecimale è 50 e in ottale è 120. Sono tutti equivalenti.

    La questione "decimale", "esadecimale", "ottale" è solo una questione di rappresentazione "visiva".

    getBytes() nel primo byte del buffer ti mette un byte 01010000.

    Se tu stampi con
    System.out.println(writeBuffer[i]);

    te lo stampa in decimale.

    Vuoi stamparlo esadecimale?

    System.out.println(Integer.toString(writeBuffer[i] & 0xff, 16));

    Originariamente inviato da SHARKSEAL
    e conosci anche il metodo inverso per ottenere dall'array di byte di nuovo la stringa
    Costruttore di String che riceve un byte[]

    P.S.: nota che quando si parla di conversione tra String e byte[] si dovrebbero anche sempre considerare le questioni sul charset. getBytes() e il costruttore String(byte[] bytes) usano il charset di "default" della piattaforma. Quale sia .... dipende e potrebbe anche non essere appropriato per quello che devi fare.

    Esistono infatti il getBytes(String charsetName) e il costruttore String(byte[] bytes, String charsetName) e questi andrebbero usati se si "sa" o si vuole imporre un certo charset per la (de)codifica dei caratteri.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ah ok grazie ... sei stato chiarissimo

    Grazie per la disponibilità e cortesia !!!

  10. #10
    Ciao andbin scusa se ti riscrivo ma rileggendo documentazioni e anche le tue risposte non mi torna ciò che hai scritto :

    ( Ma forse non hai ancora capito .... non ha senso dire "byte in esadecimale" !!

    Un byte è un byte .... sono 8 bit. Secondo il codice ASCII la "P" in binario è 01010000.
    Che in decimale è 80, in esadecimale è 50 e in ottale è 120. Sono tutti equivalenti.)

    Forse è qui che non mi son fatto capire...

    Io ho scritto :

    "Prendendo in considerazione la stringa "Pippo"

    Il risultato deve essere : byte writeBuffer[] contenete i valori esadecimali della stringa "Pippo"

    Praticamente writeBuffer [0] = 50 (esadecimale)
    writeBuffer [1] = 69
    ecc..."


    Perchè non posso parlare di un array di esadecimale ? Cosa c'entra la rappresentazione scelta con la quantità di memoria disponibile ?

    Se ho capito bene un array di byte (contiene valori di 8 bit ) ... ma cosa mi vieta che questi valori non possa rappresentarli in esadecimali??? Allora che senso avrebbe l'esistenza del byte, della word, della dword, della qword???

    Io ho provato ad utilizzare questo pezzo di codice e funziona benissimo :

    byte mioarray[]={(byte)0xFF,(byte)0xFF,(byte)0xFF};

    Io penso che l'unica cosa di cui devo preoccuparmi è che essendo un array di valori a 8 bit posso rappresentare al massimo 255 (valori in decimale) FF (in esadecimale ma essendo signed in java fino a 7F ovvero (127) in decimale ma a me non interessa visto che tutti i caratteri del codice ASCII vanno da 0 a 127 quindi sono perfettamente coperto)

    Il metodo getByte si è vero mi restituisce un array di byte ma con valori decimali non esadecimali .

    Io chiedevo solo una funzione che mi convertisse una normale stringa "pippo" nei rispettivi valori esadecimali da poter poi assegnare in un array di byte ... tutto qui.

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.