www.mikrocontroller.net

Forum: Compiler & IDEs char array in int und umgekehrt


Autor: Chriss (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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


Autor: Chriss (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Chriss (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Chriss (Gast)
Datum:

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

Autor: Chriss (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.