Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Da HEX a ASCII

  1. #1

    Da HEX a ASCII

    Ciao a tutti,
    c’è una cosa che mi sta letteralmente spiazzando…
    Ho la seguente stringa che contiene codici esadecimali:
    “4e28993dd1e5da7f592415f8208014a1ce916aab0f850817”

    Ho la necessità di trasformarla o meglio convertirla in caratteri ASCII.
    Esiste un metodo che faccia ciò?

    Vi ringrazio per le eventuali risposte.

  2. #2

    Re: Da HEX a ASCII

    Originariamente inviato da aironeangelo77
    Ciao a tutti,
    c’è una cosa che mi sta letteralmente spiazzando…
    Ho la seguente stringa che contiene codici esadecimali:
    “4e28993dd1e5da7f592415f8208014a1ce916aab0f850817”

    Ho la necessità di trasformarla o meglio convertirla in caratteri ASCII.
    Esiste un metodo che faccia ciò?

    Vi ringrazio per le eventuali risposte.
    http://www.mkyong.com/java/how-to-co...ascii-in-java/

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

    Re: Da HEX a ASCII

    Originariamente inviato da aironeangelo77
    Ho la seguente stringa che contiene codici esadecimali:
    “4e28993dd1e5da7f592415f8208014a1ce916aab0f850817”

    Ho la necessità di trasformarla o meglio convertirla in caratteri ASCII.
    Quindi 4e è una "N", 28 è una "(", 99 è ... non lo so perché è fuori dal ASCII e dovresti precisare quale charset intendi usare!!

    Originariamente inviato da aironeangelo77
    Esiste un metodo che faccia ciò?
    Già fatto nel framework di Java SE no, mi spiace. Ma puoi farlo tu e non è complicato. Hai coppie di cifre esadecimali, ti basta estrarre le coppie una per una "4e", poi "28" ecc.... Quindi con Integer.parseInt("..", 16) ottieni un int che converti a char. I char puoi metterli in un array (se sai a priori la dimensione) o appenderli in un StringBuffer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4

    Re: Re: Da HEX a ASCII

    Originariamente inviato da andbin
    Quindi 4e è una "N", 28 è una "(", 99 è ... non lo so perché è fuori dal ASCII e dovresti precisare quale charset intendi usare!!
    Quando parli di charset da usare cosa intendi?
    Quando faccio:
    codice:
     
    int decimal = Integer.parseInt(output, 16);                
    sb.append((char)decimal);
    in corrispondenza di 99, il risultato convertito in decimale è 153 che poi convertito in ASCII diventa il seguente carattere: ™
    Ma non dovrebbe essere corretto in quanto mi aspetterei un "?".

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

    Re: Re: Re: Da HEX a ASCII

    Originariamente inviato da aironeangelo77
    Quando parli di charset da usare cosa intendi?
    I codici ASCII vanno da 0x00 a 0x7F. Quindi 0x99 (153 in decimale) non è ASCII e cosa sia .... dovresti precisarlo. Tra l'altro non è nemmeno un codice valido nel latin-1 (ISO-8859-1).

    Originariamente inviato da aironeangelo77
    Quando faccio:
    codice:
     
    int decimal = Integer.parseInt(output, 16);                
    sb.append((char)decimal);
    in corrispondenza di 99, il risultato convertito in decimale è 153 che poi convertito in ASCII diventa il seguente carattere: ™
    Ma non dovrebbe essere corretto in quanto mi aspetterei un "?".
    Non so chi/cosa faccia convertire il carattere nella numeric entity ™

    Facendo:
    sb.append((char)decimal);

    in quel buffer sb hai 1 char che ha codice 153. Punto. Nulla che riguarda le entity. Dove poi usi e a cosa passi questo buffer .... non lo so. Non l'hai detto, non hai precisato altro, non hai mostrato altro codice.

    Presumo stai usando una API, libreria o altro che codifica anche le entity HTML. Ma se non dici cosa ....... non sono un oracolo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6

    Re: Re: Re: Re: Da HEX a ASCII

    Originariamente inviato da andbin
    I codici ASCII vanno da 0x00 a 0x7F. Quindi 0x99 (153 in decimale) non è ASCII e cosa sia .... dovresti precisarlo. Tra l'altro non è nemmeno un codice valido nel latin-1 (ISO-8859-1).

    Non so chi/cosa faccia convertire il carattere nella numeric entity ™

    Facendo:
    sb.append((char)decimal);

    in quel buffer sb hai 1 char che ha codice 153. Punto. Nulla che riguarda le entity. Dove poi usi e a cosa passi questo buffer .... non lo so. Non l'hai detto, non hai precisato altro, non hai mostrato altro codice.

    Presumo stai usando una API, libreria o altro che codifica anche le entity HTML. Ma se non dici cosa ....... non sono un oracolo.
    Ok, scusami…credevo che non fosse necessario specificare di più…
    Allora io possiedo un file che all’interno contiene delle stringhe del tipo di quelle che ho riportato nel primo post.
    Queste stringhe sono state ottenute da caratteri ascii converiti in esadecimale. Questi caratteri ascii erano il risultato di un processo di crittografia con algoritmo “triple DES”.

    Ora io devo fare il processo inverso…cioè prendere queste stringhe in esadecimale, convertirle in ascii e decriptarle con lo stesso algoritmo (ovviamente con la stessa chiave).
    So bene che i codici ascii vanno nell’intervallo da te specificato, ma quel “99” (come anche altri codici che vanno oltre al 0x7F) esiste nel file e non so come sia stato ottenuto (se non con il processo specificato prima)!
    Il codice in sintesi è il seguente:
    codice:
    //prende la stringa e la formatta togliendogli i trattini e gli spazi 
    String plaintxt = formatter(encryptText); 
    char[] ch1 = plaintxt.toCharArray(); 
    //ho provato a usare vari charset 
    b64cipher = new String(HEXUtility.decodeHex(ch1),"ISO-8859-15"); 
    //decodifica 
    codec = new String(cipher(b64cipher.getBytes(), Cipher.DECRYPT_MODE),"ISO-8859-15").trim();
    La HEXUtility.decodeHex è la seguente (questa è la prima versione che ho usato):
    codice:
      
    /**      
     * Metodo utilizzato per decodificare il codice HEX e convertirlo in byte      
     * @param data: in ingresso si richiede un array di char,verranno presi a coppie di due      
     * @return un array di byte corrispondenti al valore effettivo  del dato      
     */     
     public static byte[] decodeHex(char[] data) throws DecoderException {         
        int len = data.length;          
        if ((len & 0x01) != 0) {             
           throw new DecoderException("Numero dei caratteri non corretto");         
        }                  
        byte[] out = new byte[len >> 1];          
        // due caratteri per HEX         
       for (int i = 0, j = 0; j < len; i++) {             
          int f = toDigit(data[j], j) << 4;             
          j++;             
          f = f | toDigit(data[j], j);             
          j++;             
          out[i] = (byte) (f & 0xFF);         
       }         
       return out;     
    }       
    
    /**      
       * metodo d'appoggio per la decodifica degli HEX      
       */    
       protected static int toDigit(char ch, int index) throws DecoderException {         
         int digit = Character.digit(ch, 16);         
         if (digit == -1) {             
            throw new DecoderException("Carattere HEX non corretto " + ch + " alla posizione " +   index);         
         }         
         return digit;     
    }
    Ciao e ancora grazie,

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.