Forum: Mikrocontroller und Digitale Elektronik INT und CHAR


von HansDampf (Gast)


Lesenswert?

Hallo Leute, ich hätte da mal wieder eine Frage:

Ich möchte den "Inhalt" einer uint_16-Variable über ein Display 
ausgeben. Für die Ausgabe bräuchte ich aber diesen "Inhalt" als 
char-Variable. Wie kann ich also eine INT-Variable an ein CHAR 
übergeben??

von Rene H. (Gast)


Lesenswert?

Wenn ich Dich richtig verstanden habe, mit itoa oder sprintf, beides 
benötigt aber einen char array.

von dodl (Gast)


Lesenswert?

In C mit sprintf oder snprintf.

zB:

uint16_t wert = 1234;

char buffer[16];

sprintf(buffer, "%u", wert);

von B. S. (bestucki)


Lesenswert?


von Dirk B. (dirkb2)


Lesenswert?

Um welche Programmiersprache geht es?

In C und ähnlichen Sprachen werden die Typen klein geschrieben und 
Zeichenfolgen oft als Arrays behandelt.
Daher hat man dann kein char sondern ein char* (Zeiger auf char, großer 
Unterschied)
Aus diesem Array kann man aber die einzelnen Zeichen (char) auslesen.


Zur Umwandlung von Werten in menschenlesbarer Darstellung gibt es 
verschiedenen Funktionen.

Die allgemeinste Methode wäre printf bzw sprintf zu nehmen.
Es gibt aber auch noch itoa.

von Sebastian S. (amateur)


Lesenswert?

Ich würde sagen: "Ganz vorsichtig", damit nichts verloren geht!

Ansonsten, wie wär's mit einer etwas genaueren Spezifikation.

Muss aber nicht sein.

von HansDampf (Gast)


Lesenswert?

Dirk B. schrieb:
> In C und ähnlichen Sprachen werden die Typen klein geschrieben und
> Zeichenfolgen oft als Arrays behandelt.
> Daher hat man dann kein char sondern ein char* (Zeiger auf char, großer
> Unterschied)

Ja da hast du recht

void LCDSoftText(char *__putstr, unsigned int xpos, unsigned int ypos, 
unsigned char color)
{
 char __ps;
 unsigned int xp,yp;

 if(fontwidth==0) return; //Kein Font ausgewählt

 xp=xpos; yp=ypos;

 while((__ps = *__putstr))
  {
   __putstr++;
   if (__ps== 0) break;
   LCDSoftChar(__ps,xp,yp,color);
   xp+=fontwidth; //Nächstes Zeichen
   if(xp>=LCD_WIDTH) { xp=0; yp+=fontheight; } //Nächste Zeile
  }
}

und damit möchte ich eine Zahl ausgeben die in einer INT-Variable steckt

von HansDampf (Gast)


Lesenswert?

Be S. schrieb:
> 
https://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

danke für den link, der ist echt gut aber wenn ich jetzt itoa( i, 
Buffer, 10 ); eingebe dann meckert der Compiler dass er vor der 
Konstanten einer klammer erwartet hat. Woran liegt das?

von rahc (Gast)


Lesenswert?

hast Du das: char Buffer[20];
?

von HansDampf (Gast)


Lesenswert?

Ja, war nur an der falschen Stelle im Code, jetzt funktioniert. Danke 
euch.

von Dirk B. (dirkb2)


Lesenswert?

Noch als Anmerkung:

itoa gehört nicht zum C-Standard und es gibt Implementierungen die nur 
zwei Parameter haben (BAsis ist fest auf 10).

von Rolf M. (rmagnus)


Lesenswert?

Dirk B. schrieb:
> In C und ähnlichen Sprachen werden die Typen klein geschrieben

Außer unter Windows. Da gibt's aus irgendeinem Grund für jeden Typ einen 
typedef, der genauso heißt, aber komplett groß geschrieben wird und den 
man offenbar bevorzugen soll. Wahrscheinlich um maximal inkompatibel zu 
anderen Systemen zu sein.

von Thomas K. (muetze1)


Lesenswert?

Diese Typedefs definiert die WinAPI und nutzt diese in ihrer gesamten 
Deklaration. Das hat nix mit C zu tun sondern Folge dessen das du 
explizit oder implizit den Windows header angezogen hast.

So ist zumindest die Definition der WinAPI einheitlich und man muss 
nicht abhängig vom Zielcompiler die API Deklarationen/Dokumentation 
anders beschreiben. Ein int ist daher wohl nicht eindeutig und DWORD 
doch schon eher.

von Rolf M. (rmagnus)


Lesenswert?

Thomas K. schrieb:
> So ist zumindest die Definition der WinAPI einheitlich und man muss
> nicht abhängig vom Zielcompiler die API Deklarationen/Dokumentation
> anders beschreiben. Ein int ist daher wohl nicht eindeutig und DWORD
> doch schon eher.

Es gibt aber auch INT und FLOAT und sogar VOID.

von Thomas K. (muetze1)


Lesenswert?

Jupp, ist richtig. Aber wie gesagt alles Definitionen für die WinAPI. 
Ich wollte nur darauf hinweisen, dass dieses nichts mit "einem C 
Compiler auf Windows" zu tun hat. Und bevorzugen sollte man diese auch 
nicht allgemein in C auf Windows, außer es geht um die Nutzung/Aufrufe 
von WinAPI Funktionen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.