Hallo, bitte um eure hilfe. Möchte ein char array in int konvertieren und umgekehrt: Also z.b. unsigned char Buffer[10]; Buffer[0] = '0'; Buffer[1] = '2'; Buffer[2] = '5'; Buffer[3] = '5'; In meinem int will ich dann 255 stehen haben. und das ganze umgekehrt auch... hab es mal mit atoi probiert, aber das haut nicht hin... schöne Grüße
Klar, wenn Du mit atoi arbeiten willst, muss Dein ASCII-String auch terminiert sein, damit atoi das Ende des Strings findet. Du müsstest zur sicheren Funktion also mindestens mal ein "Buffer[4] = '\0'" dranhängen. Ein ASCII-String muss immer um ein Zeichen länger sein als der darin abzuspeichernde Inhalt.
@ Chriss >Möchte ein char array in int konvertieren und umgekehrt: Die Formulierung ist komisch. Du meinst wohl eher, dass du einen String, welcher eine Zahl darstellt, in einen int konvertieren willst. >unsigned char Buffer[10]; >Buffer[0] = '0'; >Buffer[1] = '2'; >Buffer[2] = '5'; >Buffer[3] = '5'; >In meinem int will ich dann 255 stehen haben. >und das ganze umgekehrt auch... Das macht itoa(). Ich nehme an dass du mit dem WINAVR arbeitest?! Siehe Doku der libc. >hab es mal mit atoi probiert, aber das haut nicht hin... Dann machst du was falsch. Dein Stringterminator fehlt. unsigned char Buffer[10]; int my_int; Buffer[0] = '0'; Buffer[1] = '2'; Buffer[2] = '5'; Buffer[3] = '5'; Buffer[4] = 0; // OHNE '' my_int = atoi(buffer); MFG Falk
void main() { u16 _data=0; u8 InBuff[10]; InBuff[0] = '0'; InBuff[1] = '0'; InBuff[2] = '0'; InBuff[3] = '2'; InBuff[4] = '5'; InBuff[5] = '5'; InBuff[6] = '\0'; _data = atoi(InBuff); //Convert from String-Array to int while(1); } Hab das ganze schonmal probiert... scheint aber nicht zu funktionieren Was mach ich da falsch? sg
Hast Du die stdlib.h aucch eingebunden? Und noch was: Verwende nie Variablennamen, die mit einem Underscore (_) beginnen! Das ist für das System reserviert.
Ach ja, Falk hat natürlich auch Recht: Anstelle von '\0' kannst Du auch einfach ne 0 hinschreiben. Mir ist die Steuerzeichen-Schreibweise allerdings i.d.R. lieber, weil man so direkt erkennt, was da genau steht (nämlich ein ASCII-Steuerzeichen und keine Zahl).
Man kann alles hinschreiben statt 0 was er nicht als ascii zeichen kennt. also auch 255 oder so Ja ich find das lustig.. Ich hab das ganze mit dem AVR-Simulator ausprobiert. Wenn ich als Device nen kleinen atmega16 oder so nehme dann steht unten im error report sobald ich atoi aufrufe : uninitialized stack pointer Wenn ich nen atmega 64 nehme dann funzt es schöne Grüße
Chriss wrote: > Man kann alles hinschreiben statt 0 was er nicht als ascii zeichen > kennt. > also auch 255 oder so das liegt daran, dass in C ein char auch nichts anderes als eine Zahl ist. Lediglich bei Ein/Ausgabe werden char anders behandlet aber ansonsten kann man alles was man mit einer Zahl (wenn auch nur im Bereich 0..255 oder -128 .. 127) machen kann auch mit einem char machen. Allerdings: Die String Funktionen wollen eine 0 sein. > Wenn ich als Device nen kleinen atmega16 oder so nehme dann steht unten > im error report sobald ich atoi aufrufe : uninitialized stack pointer Das ist nicht gut. <denk, denk, denk, ...>
> Allerdings: Die String Funktionen wollen eine 0 sein.
Antwort vom Sender Jerewan: ,,Im Prinzip ja, aber...''
Da strtol() & Co. ja bei jedem nicht-Ziffer-Zeichen mit der
Konvertierung aufhören, kann man auch ein 'X' da hin schreiben
oder sonstwas, solange es eben keine gültige Ziffer ist. ;-)
> Wenn ich als Device nen kleinen atmega16 oder so nehme dann steht unten > im error report sobald ich atoi aufrufe : uninitialized stack pointer Das ist nicht gut. <denk, denk, denk, ...> Weiß jemand warum das ist??? schöne Grüße
>>Hast Du die stdlib.h aucch eingebunden? Und noch was: Verwende nie >>Variablennamen, die mit einem Underscore (_) beginnen! Das ist für das >>System reserviert. Also ich nehme eigentlich immer _ wenn die variable nicht global ist, sondern nur in einer funktion 'verfügbar'. schöne Grüße
Chriss wrote: > Also ich nehme eigentlich immer _ wenn die variable nicht global ist, > sondern nur in einer funktion 'verfügbar'. In diesem Falle ist das zulässig, sofern das zweite Zeichen ein Kleinbuchstabe oder eine Ziffer ist. Bezeichner, bei denen das zweite Zeichen ebenfalls ein Unterstrich oder ein Großbuchstabe ist, sind immer für Compiler und Bibliothek vorbehalten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.