Forum: PC-Programmierung Char Array Umwandlung


von Philip W. (paulo89)


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

von Karl H. (kbuchegg)


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
1
int convert( char * string )
2
{
3
  int result = 0;
4
5
  while( isdigit( *string ) ) {
6
    result = 10 * result + ( *string - '0' );
7
    string++;
8
  }
9
10
  return result;
11
}

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.

von Philip W. (paulo89)


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

von P. S. (Gast)


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.

von Philip W. (paulo89)


Lesenswert?

Sry, ... für die allgemeine Verwirrung, bitte um Hilfe^^

von Karl H. (kbuchegg)


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.

von Philip W. (paulo89)


Lesenswert?

ginge das auch so...


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

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

  return result;
}

von DirkB (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

1
int convert(char *Wert)
2
{
3
  int result = 0;
4
 
5
  while (isdigit(*Wert)) 
6
  {
7
    result = 10 * result + (*Wert - '0');
8
    Wert++;
9
  }
10
11
  return result;
12
}

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.