char array in int und umgekehrt

Gast #539364
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
Gast #539372
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.
#539377
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

Gast #539379
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
Gast #539388
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).
Gast #539391
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
#539399
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, ...>
Gast #540581
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
Gast #540582
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
Moderator Persönliche Seite #540624
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren