www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zeichen im String umwandeln


Autor: Helge (Gast)
Datum:

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

Autor: Helge (Gast)
Datum:

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

Autor: Reiner (Gast)
Datum:

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

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Aufruf muß natürlich so sein.

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


Reiner

Autor: Helge (Gast)
Datum:

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

Autor: Helge (Gast)
Datum:

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

Autor: Reiner (Gast)
Datum:

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

}

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Dir. Ich versuche mal morgen mein Glück.

Autor: Helge (Gast)
Datum:

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

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, freut mich!

Reiner

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.