www.mikrocontroller.net

Forum: Compiler & IDEs bei verwendung von itoa alles verkehrtherum


Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

: Gesperrt durch Moderator
Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

Du hast vor über acht Jahren einen Fehler entdeckt, der mich 2011 auch 
getroffen hat:
Beitrag "Problem mit ltoa"

Auch die neueste Version des WINAVR produziert auf dem ATtiny26 die 
Ausgabestrings von itoa verkehrtherum.

Gruß
Joachim

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.