bei verwendung von itoa alles verkehrtherum

Gast #40715
Lesenswert?

Hallo,

ich habe mein LCD Anzeigeproblem gefunden, allerdings kann ich es mir
nicht erklären.
Wenn ich den befehl itoa verwende dreht er mir alles verkehrherum.

d.h. bei folgendem Code:

  WaterDisplay = 201;
  itoa(WaterDisplay,s,16);
  strcat(s,"C");
  WriteLCD(s);

steht folgendes auf dem Display: 102C

Der String wird von der WriteLCD Funktion korrekt ausgelesen und
dargestellt. ein WriteLCD("Das ist ein Test") funktioniert tadellos!
also scheint der Fehler beim itoa zu liegen.

WaterDisplay ist übrigends ein unsigned int. habs aber auch schon mit
unsigned char und int probiert, bei beidem das selbe problem.

Gibts noch ne andere Lösung oder kennt jemand das Problem. CPU ist ein
Tiny26

Gruß
Malte.
Gast #40716
Lesenswert?

Hallo Malte

Also meiner Meinung nahc müsste auf der Anzeige C9C stehen.
Mit itoa(WaterDisplay,s,16) wandelst du die Zahl 201 in einen Hexstring
(Basis 16) um, wobei als Resultat C9 herauskommen müsste.
Um eine dezimalzahl zu erhalten müsstest du itoa(WaterDisplay,s,10)
verwenden.
Warum bei dir allerdings 102C angegeben wird ist mir völlig
schemenhaft.
Wie ist denn dein s deklariert?

Gruss
Christian
Gast #40717
Lesenswert?

Hi,

die 16 mußt du dir natürlich wegdenken das sollte ne 10 sein...
aber es ist egal ob radix 10 oder 16 ist, die anzeige ist IMMER
verkehrtherum...

habs auch schon mit einem strrev(s) probiert aber da tut sich
GARNICHTS.

s ist ein "char s[10];"

ist echt komisch...
Gast #40718
Lesenswert?

Irgendwie zerschießt Du Dir den Speicherbereich offenbar wieder,
in dem Du das alles machst.  Wie das genau funktioniert, müßte
man wohl debuggen...  Aber itoa() macht am Ende selbst ein
strrev().

Du kannst ja mal probieren, Deinen Puffer als statische (bzw.
globale) Variable anzulegen.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.