Wenn Sie Sprintf haben
char outString[10];
sprintf(outString, "%hu", ADC_result);
Oder wenn Ihre INTs 16 Bit sind
sprintf(outString, "%u", ADC_result);
Frage
Was ich machen will; was ich vorhabe zu tun:Verwandeln Sie die resultierende 16 -Bit -Nummer (nach dem Kombinieren der beiden 8 -Bit -#S) in eine Zeichenfolge, die mit meiner seriellen Sendungsfunktion verwendet werden soll
Das Problem:Bei der Verwendung von ITOA wird das Ergebnis negativ, sobald es den halben Punkt übergeht (vergeht vom 15. Bit bis 16.), sodass es im Wesentlichen das 16. Bit als Vorzeichenbit (nicht überraschend) verwendet, wo meine Nummer nicht signiert sein soll. Sprintf macht dies auch. Beachten Sie, dass Itoa (16) perfekt funktioniert, wie es sollte.
Die Hardware:ATMEGA16 MICRO -Prozessor (AVR C) 16 -Bit -Externe ADC, das über SPI -Bus verbunden ist (sendet ADC -Ergebnis als zwei 8 -Bit -Nummern)
Der Code:
uint16_t ADC_result = ADC_data_LSB | (ADC_data_MSB<<8); // Combine both halves of the data
unsigned char *outString = "0123456789abcdef";
itoa(ADC_16_result, outString, 10);
send_A_String(outString);
Das Ergebnis davon ist, dass es eine 15 -Bit -Signierung anstelle des ursprünglichen UINT16 druckt. Ich habe ITOA verwendet, um die Ergebnisse des 10 -Bit -internen ADC zu drucken, aber es bringt mich um, dass etwas so Einfaches mich so lange braucht.
Ich schätze deine Zeit sehr.
Lösung
Wenn Sie Sprintf haben
char outString[10];
sprintf(outString, "%hu", ADC_result);
Oder wenn Ihre INTs 16 Bit sind
sprintf(outString, "%u", ADC_result);