Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802

    Convertire ASCII in esadecimale

    Ciao a tutti,
    dovrei convertire alcuni caratteri ASCII in esadecimale per poi fare uno xor di controllo. Come posso fare la conversione?

    Ho usato la funzione Ord() ma da ASCII me lo porta a decimale e non va bene. Non posso usare nè stringhe nè caratteri ma solo interi altrimenti lo xor mi restituisce errore.
    So che ci sono due caratteri particolari $ # ma non ho ancora capito le differenze tra i due (la guida l'ho letta e ho anche cercato altre info ma nonostante tutto non comprendo il loro significato).

    Qualcuno che sa darmi qualche info o consiglio?
    Grazie mille.
    www.beppegrillo.it
    Il blog di Beppe!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    La conversione che devi ottenere è il corrispondente esadecimale del carattere sottoforma di stringa?

    In caso contrario, non esiste un valore esadecimale o decimale, o meglio si tratta semplicemente di rappresentazioni differenti di uno stesso valore che, comunque, è sempre lo stesso (quindi decimale, esadecimale, ottale e così via è ininfluente).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    Originariamente inviato da alka
    La conversione che devi ottenere è il corrispondente esadecimale del carattere sottoforma di stringa?

    In caso contrario, non esiste un valore esadecimale o decimale, o meglio si tratta semplicemente di rappresentazioni differenti di uno stesso valore che, comunque, è sempre lo stesso (quindi decimale, esadecimale, ottale e così via è ininfluente).

    Ciao!
    Mi spiego, sto creando una libreria per il collegamento di un apparecchio tramite porta seriale; questo apparecchio mi risponde con una serie di caratteri (SOH, STX, NACK e altro) in formato char. All'interno della risposta come ultimo carattere viene inserito il VCR calcolato facendo l'or esclusivo di tutti i caratteri tranne il primo (STX); quello che devo fare è recuperare i caratteri di risposta, fare l'or esclusivo e confrontarlo con quello inviato dall'apparecchio come ultimo dato. Ora converto tutto in decimale con la funzione Ord() ma c'è qualcosa che non quadra (all'intero della risposta ci sono alcuni dati come ore minuti secondi e decimi che devono essere calcolati non in esadecimale ma in decimale, quindi tutti i caratteri della risposta vanno convertiti in esadecimale mentre i dati relativi al tempo vanno convertiti in decimale), volevo appunto verificare che non sia la conversione errata ma che sia la ricezione dei dati che in qualche modo non recuperano tutta la stringa correttamente. Da alcuni test sembra che convertire la risposta tutta in decimale non dia problemi ma volevo avere qualche certezza perchè da una parte risulta che la risposta ha alcune mancanze, o per lo meno non corrisponde il controllo con il VCR, dall'altra sembra invece che la risposta sia corretta (mi arrivano tutti i dati, quindi la stringa è completa).
    www.beppegrillo.it
    Il blog di Beppe!!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Se riesci ad ottenere il valore intero numerico corrispondente ad un carattere ASCII, hai un valore numerico, punto e basta: non esiste un valore numerico decimale oppure esadecimale, ma il valore stesso e un modo, decimale ed esadecimale, di rappresentarlo.

    In sostanza, se hai una variabile Integer, hai un valore intero che non è in se esadecimale o decimale, è un valore e basta; avere 0A oppure avere 10 è la stessa identica cosa, e attribuendo entrambi i valori ad una stessa variabile, tale variabile assumerà un unico valore, che è 0A espresso in esadecimale, oppure 10 espresso in decimale.

    Detto questo, forse ciò che probabilmente devi fare è rappresentare questi valori numerici sottoforma di numero esadecimale; cioè, se calcoli un checksum che vale 10, ciò che dovrai inviare in output, se è richiesto l'esadecimale, sarà il carattere "A", cioè il carattere che corrisponde alla rappresentazione esadecimale del valore 10.

    Verifica attentamente cosa devi fare, in quanto ho paura che ci sia molta confusione in questo senso tra valori, loro rappresentazioni e così via.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.