www.mikrocontroller.net

Forum: PC-Programmierung Char Array Umwandlung


Autor: Philip W. (paulo89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schönen guten Abend,

bin gerade damit beschäftigt ein Programm in C zu schreiben.
Bin auf folgende Problematik gestoßen...
...habe ein Array char Wert [] beschrieben von [0] bis [3] (siehe 
Programmcode)

Möchte nun die Werte Wert[0] bis Wert[4] in ein Integer wandeln, um 
anschließend eine Dezimalziffer zu erzeugen.

Wert[0] = '1'
Wert[1] = '2'
Wert[2] = '2'
Wert[3] = '3'

der spätere Dezimalwert soll 1223 entsprechen und daraufhin mit anderen 
Dezimalwerten verglichen werden (siehe Programmcode)

Kann ich das char Array mit dem Aufruf einer int Funktion (char[]) und 
einem return Befehl in int umwandeln, oder so ähnlich.

So müsste das i-wie gehen oder, muss nur vorher die Werte von char in 
int wandeln? Und wie?

Wert_ges= (Wert[0]-48)*1000+(Wert[1]-48)*100+ 
(Wert[2]-48)*10+Wert[3]-48)*1




Programmausschnitt

//Hier wird das Array von 0 bis 3 beschrieben//

do
           {
             if (UART1_Data_Ready())
             {

              ziffer = UART1_Read();
              Wert [zaehl] = ziffer;
              zaehl = zaehl++    ;
             }
           } while (ziffer != 111);




if (Wert_ges < 1000)
{
  PORTA = 0x01;
}


MfG

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

Bewertung
0 lesenswert
nicht lesenswert
Philip W. schrieb:

> Kann ich das char Array mit dem Aufruf einer int Funktion (char[]) und
> einem return Befehl in int umwandeln, oder so ähnlich.
>
> So müsste das i-wie gehen oder, muss nur vorher die Werte von char in
> int wandeln? Und wie?

Im einfachsten Fall benutzt du einfach die vorgefertigte Funktion atoi() 
oder strtol(). Die sind für solche Zwecke gedacht.

Willst du das selber schreiben
int convert( char * string )
{
  int result = 0;

  while( isdigit( *string ) ) {
    result = 10 * result + ( *string - '0' );
    string++;
  }

  return result;
}

PS: Ein C-Buch ist angebracht. Du hast noch einige andere fertige 
Hilfsfunktionen zur Verfügung. In deinem noch zu kaufenden C-Buch sind 
die alle aufgeführt, wie man sie benutzt und welche Besonderheiten es 
gibt.
Neben vielen anderen, für einen C-Programmierer wichtigen Themen.

Autor: Philip W. (paulo89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorab schon einmal vielen Dank für die schnelle Antwort.

In einer Integer Variable ist 16 bit groß und es stehen dann darin ganze 
Zahlen oder (also Dezimal) Im character stehen Buchstaben sprich ASCII 
oder?

Könnte mir jemand helfen und die Umwandlung für meine Anwendung mal 
umschreiben so wie es aussehen müsste?
Sprich so dass ich dann abschließend den Vergleich realisieren kann.
Wäre wirklich dankbar für weitre Antworten.

MfG

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Philip W. schrieb:

> In einer Integer Variable ist 16 bit groß und es stehen dann darin ganze
> Zahlen oder (also Dezimal) Im character stehen Buchstaben sprich ASCII
> oder?

Sortiere erst einmal deine Gedanken. Dann deine Worte.

Autor: Philip W. (paulo89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry, ... für die allgemeine Verwirrung, bitte um Hilfe^^

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

Bewertung
0 lesenswert
nicht lesenswert
Philip W. schrieb:
> Vorab schon einmal vielen Dank für die schnelle Antwort.
>
> In einer Integer Variable ist 16 bit groß und es stehen dann darin ganze
> Zahlen oder (also Dezimal) Im character stehen Buchstaben sprich ASCII
> oder?

Ja.
Spielt aber keine Rolle. Zumindest nicht die, die du jetzt denkst.
Ein char ist auch nichts anderes als eine Variable, die eine Zahl 
enthält. Und ja, auch mit einem char kann man rechnen!

> Könnte mir jemand helfen und die Umwandlung für meine Anwendung mal
> umschreiben so wie es aussehen müsste?

Sieh dir den Code an, den ich dir gepostet habe und überleg, wie das 
wohl funktioniert. Dein Codebeispiel ist ja nicht so weit davon 
entfernt. Nur anders strukturiert und anstelle dass du den ASCII Code 
für 0 hingeschrieben hast, übertrage ich diese Aufgabe an den Compiler, 
in dem ich einfach '0' schreibe.

Autor: Philip W. (paulo89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ginge das auch so...


int convert(char Wert[])
{
  int result = 0;

  while( isdigit( Wert[]) ) {
    result = 10 * result + ( Wert[] - '0' );
    Wert++;
  }

  return result;
}

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Entweder Array oder Pointer.

Ein Array braucht einen Index.

int convert(char Wert[])
{
  int result = 0;
  int i = 0;

  while( isdigit( Wert[i]) ) {
    result = 10 * result + ( Wert[i] - '0' );
    i++;
  }

  return result;
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int convert(char *Wert)
{
  int result = 0;
 
  while (isdigit(*Wert)) 
  {
    result = 10 * result + (*Wert - '0');
    Wert++;
  }

  return result;
}

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.