Forum: Mikrocontroller und Digitale Elektronik zeichen im String umwandeln


von Helge (Gast)


Lesenswert?

...und schon wieder ich

hab ne Zeichenkette z.B. String "500040C90...."
Bei den Zeichen 0C handelt es sich um eine Hex Zahl (d12).
Jetzt möchte ich die Hex 0C nach "kette" kopieren.
Beispiel:
int k;i;
char kette[3];
i=5; //sollte die 0 von 0C sein
kette[k]=string[i];
k++;i++;
kette[k]=string[i];

Jetzt hoffe ich,daß in dem String "Kette" 0C steht.
Nun steht ja i auf C vom string und ich möchte i jetzt um 12 stellen 
erhöhen.
Wie stell ich es am besten an? Er erhöht mir immer i um 67.
Ist ja ein "C" aber soll ja hex C sein.
Gruß Helge

von Helge (Gast)


Lesenswert?

Hat denn keiner ne Idee?
Hab jetzt erst mal das eingelesene "C" mit 55 subtrahiert.
Geht auch erst mal. Aber nur von Hex A bis F.

von Reiner (Gast)


Lesenswert?

//-----------------------------------------------------------

char gethex(char *s)
{
  char h,l;
  h = s[0] - '0';
  l = s[1] - '0';
  if(h>9)
    h -= 7;
  if(l>9)
    l -= 7;
  return h*16+l;
}



i = gethex(kette[k-1]);


kommst klar?
Reiner

von Reiner (Gast)


Lesenswert?

der Aufruf muß natürlich so sein.

i = gethex(&kette[k-1]);


Reiner

von Helge (Gast)


Lesenswert?

Hallo Reiner
Vielen Dank für den Tip.Gestern hat´s mich recht früh entschärft.Hab die 
ganze Woche bis nachts gesessen.
Das probiere ich heute gleich mal aus.
Gruß Helge

von Helge (Gast)


Lesenswert?

Hallo Reiner
Komm irgendwie nicht klar :-))))
das hier hab ich reingebastelt:

int k;
j=0;
s[j]=rx_buffer[i];j++;i++;s[j]=rx_buffer[i]; //kopiert 07 nach s (als 
zeichen ---also 55---

jetzt kommt deins:  (hab ich bestimmt falsch gemacht)

   char gethex(char *s)
    {
    char h,l;
    h = s[0] - '0';
    l = s[1] - '0';
    if(h>9)
    h -= 7;
      if(l>9)
       l -= 7;
        return h*16+l;
    }

k = gethex(&s[j-1]);

jetzt sollte in k eine 7 stehen

Vielleicht kannst du mir ja mal auf die Sprünge helfen.
Gruß Helge

von Reiner (Gast)


Lesenswert?

stelle das Programm von mir über main. Und verwende in Deinem Teil den 
Aufruf k = gethex(&s[j-1]);

Dann sollte es gehen.
Gethex ist ein Unterprogramm und muß vor dem main deklariert sein.
Reiner




char gethex(char *s){
  char h,l;
  h = s[0] - '0';
  l = s[1] - '0';
  if(h>9)
    h -= 7;
  if(l>9)
    l -= 7;
  return h*16+l;
}


void main(void){   // hier kommt Dein main
  int k;
  j=0;

  s[j++]=rx_buffer[i++];
  s[j]=rx_buffer[i];       //kopiert 07

  k = gethex(&s[j-1]);

}

von Helge (Gast)


Lesenswert?

Danke Dir. Ich versuche mal morgen mein Glück.

von Helge (Gast)


Lesenswert?

Hi Reiner
Bin leider erst jetzt dazu gekommen.
Bin begeistert,es funktioniert!!!!
Vielen Dank
Gruß Helge

von Reiner (Gast)


Lesenswert?

Super, freut mich!

Reiner

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.