Forum: Compiler & IDEs char array in int und umgekehrt


von Chriss (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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


von Chriss (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

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).

von Chriss (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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, ...>

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> 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. ;-)

von Chriss (Gast)


Lesenswert?

> 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

von Chriss (Gast)


Lesenswert?

>>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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.