> pointer targets in passing argument 2 of 'itoa'
> differ in signedness
pointer target = das worauf ein Zeiger zeigt
in passing argument 2 of itoa = die Rede ist also vom 2.ten Argument
welches an itoa übergeben wird
differ = unterscheidet sich
in signedness = das ist in der Tat etwas schwieriger zu übersetzen.
Gemeint ist: da gibt es einen signed / unsigned
Unterschied.
In Summe: Du übergibst einen Pointer auf einen signed Datentyp.
Die Funktion möchte aber einen Pointer auf einen
unsigned Datentyp.
Oder umgekehrt: Du übergibst einen Pointer auf unsigned
und die Funktion möchte einen Pointer auf signed.
Da die Rede vom 2.ten Argument zu itoa ist, wird es wohl hilfreich
sein, sich mal die Deklaration von itoa anzusehen:
char* itoa ( int zahl, char* string, int radix );
Aha. Das 2.te Argument sollte ein Pointer auf char sein.
Da ich deine typedefs nicht kenne, kann ich nur raten, was ein
u8 bzw. ein s8 sein soll. Wenn ich raten muß, würde ich mal
so raten:
typedef unsigned char u8;
typedef signed char s8;
Keines von beiden qualifiziert sich aber als ganz normaler char.
Und daher ist ein u8* nicht dasselbe wie ein char*, und ein
s8* ist auch nicht dasselbe wie ein char*. Ein char* kann
nur durch einen char* ersetzt werden.
Da du aber weist, dass das in Ordnung geht, wenn du deinen u8*
an itoa übergibst, kannst du den Compiler mit einem cast
ruhigstellen:
1 | itoa(wandlungswert, (char*)text_lcd, 10);
|
oder aber, du nimmst den char so wie er gedacht ist: Als generischen
Datentyp für eine Variable die den ASCII Code eines Zeichens aufnimmt,
bei der es egal ist, ob da ein Vorzeichenbit enthalten ist, weil
damit sowieso nicht gerechnet wird, sondern einfach nur Ein/Ausgabe
damit gemacht wird.
1 | int main(void)
|
2 | {
|
3 | char text_lcd[20];
|
4 | itoa(wandlungswert, text_lcd, 10);
|
5 | lcd_puts(text_lcd);
|
6 | }
|