Errata conversione di dati?

di Anonimizzato27383 il
4 risposte
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

  • 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
  • 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?
  • 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.
  • 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