Errata conversione di dati?

di il
4 risposte

Errata conversione di dati?

Salve a tutti.
Sto scrivendo un programma in C per microcontrollori.
inizialmente ho un tipo "signed char" (uguale a -33).

struct{
...
signed char a;
....
}

Per inviare il dato devo inserirlo nella prima posizione dell'array:

char ARRAY[200];

Devo dunque convertire "a" in "unsigned char" facendo un cast. Tale dato è rappresentato con 223.

ARRAY[0]=(unsigned char) struct->a;

Quando il micro lo invia, assieme ad altri dati ora superflui, al seriale su PC il seriale stampa un carattere ASCII corrispondente alla rappresentazione esadecimale di 223, ovvero "DF" corrispondente al carattere ASCII "ß".
Io avrei bisogno di stampare "-33" e non il suo corrispondente ASCII.
Qualcuno potrebbe darmi consigli o suggerimenti?

4 Risposte

  • Re: Errata conversione di dati?

    Quello che viene visualizzato non c'entra nulla con il codice C/C++ che hai mostrato che lavora in modo corretto (fra l'altro il char equivale al signed char quindi basta ARRAY[0]=struct->a;)

    Devi impostare la corretta opzione di visualizzazione nel programma sul PC che visualizza il dato in arrivo

    P.S. ß è il 225
  • Re: Errata conversione di dati?

    No, il terminale (ASPT) interpreta i caratteri esadecimali in entrata.
    Mi spiego meglio. Il micro invia anche sentenze NMEA, composte da caratteri e numeri, che vengono correttamente visualizzati sul Terminale.
    Ovviamente queste sentenze sono dati di tipo "char".
    Come mai i caratteri e numeri delle sentenze vengono correttamente stampati a video mentre il dato "a" proveniente da quella struct no?
  • Re: Errata conversione di dati?

    Devi fare una funzione che converta il valore numerico del signed char in un array di 4 caratteri. Prendi la tabella Ascii e provaci, è facile.
  • Re: Errata conversione di dati?

    Ti ripeto... se invii un byte stai inviando una sequenza di bit che sono interpretati da chi riceve. Il programma del pc può interpretare il byte con o senza in segno, in ascii, in decimale o in hex o in ottale...
    SE invii una stringa allora è il tuo programma sul micro che converte il byte in una sequenza Ascii "-33" e la invia.
Devi accedere o registrarti per scrivere nel forum
4 risposte