Forum: Mikrocontroller und Digitale Elektronik itoa für hexadezimalen string


von felixw (Gast)


Lesenswert?

Hallo zusammen,

habe ein Problem bei der Umwandlung einer hexadezimalen Zahl in einen 
String. Der Programmcode sieht so aus:

char *buffer[10];
int i;

itoa(i,*buffer,16);

i wird hexadezimal eingegeben. Die Ausgabe soll auch hexadezimal sein.
Für 0 < i < 0x0f wird wie es sein soll "0" bis "f" ausgegeben.
Problem: für i >= 0x10 wird kein Erfebnisstring mehr ausgegeben. Woran 
kann das liegen?

Wäre toll wenn ihr mir helfen könntet.

Viele Grüße, Felix

von mr. mo (Gast)


Lesenswert?

zerleg deine zahl doch einfach in die oberen und unteren bits und mach 
zwei mal die itoa operation.

von Andreas B. (andreas_b77)


Lesenswert?

felixw schrieb:
> itoa(i,*buffer,16);

Du verwendest den (uninitialisierten) Inhalt von buffer als Zeiger auf 
den Ausgabepuffer für itoa(). Also schreibt der das irgendwohin.

Da hättest du wohl besser auf den Compiler gehört, der die Zeile moniert 
hat.

von felixw (Gast)


Lesenswert?

Hallo Andreas,

Den Buffer hatte ich zwar schon initialisiert, jedoch war der 
initialisierte String zu kurz.

Die Initialisierung sah wie folgt aus:
*buffer = " ";
Damit hat's nicht funktioniert.

Wenn ich den String länger initialisiere, dann gehts:
*buffer = "   ";

Danke für Deinen Tipp.

Viele Grüße,

Felix

von MaWin (Gast)


Lesenswert?

Wie wär's mit:

char buffer[10];
int i;

itoa(i,buffer,16);


???

von Klaus W. (mfgkw)


Lesenswert?

felixw schrieb:
> Wenn ich den String länger initialisiere, dann gehts:
> *buffer = "   ";

Und das ist Unfug und funktioniert auf manchen Rechnern, wahrscheinlich 
nicht auf allen. Also zu vermeiden....

Grund: "  " ist ein StringKONSTANTE, auf die dein Zeiger zeigt.
Das kann -je nach System- tatsächlich konstanter Speicher zur Laufzeit 
sein, ein Überschreiben also erstens nicht zulässig und manchmal nicht 
möglich.

Dafür wäre sinnvoller zu schreiben:
char buffer[3];

Damit hast du eine VARIABLE.

von Andreas B. (andreas_b77)


Lesenswert?

Du musst buffer überhaupt nicht initialisieren. Es ging darum, dass du 
nicht die Adresse von buffer übergeben hast, sondern einen Wert, der in 
buffer steht. (MaWin hat schon geschrieben wie es richtig geht.)

Aber da hat sich der Compiler ja garantiert beschwert.

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.