Forum: Compiler & IDEs Text analysieren mit sscanf


von FrageMan (Gast)


Lesenswert?

Hallo,

ich habe folgendes Problem...
Von UART kommt eine Zeile die folgenderweise aufgebaut ist:

"wiXXX:XXXe"

w = 'w'
i = 'i' oder 'I'
XXX = eine Hex Zahl
: = ':'
e = CR Bit

Meine Frage... wie kann ich mit sscanf die erst HEX Zahl und die zweite 
HEX Zahl auslesen und in eine Variable (Integer) abspeichern?

von ich (Gast)


Lesenswert?

vom ankommenden String Position 2-4 und 6-8 in einen neuen String packen 
und umwandeln -> fertig

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1
sscanf(buf, "w%*[iI]%x:%xe", &var1, &var2);

von yxcv (Gast)


Lesenswert?

1
if ( 2==(sscanf(str, "wi%3X:%3Xe", &iVar1, &iVar2)) ){
2
    printf("success read: iVar1 = %d %x iVar2 = %d %x ",iVar1,iVar1,iVar2,iVar2);
3
  }

von FrageMan (Gast)


Lesenswert?

SUPER!! DANKE! HAT GEKLAPP!

Bitte erklären Sie mir, was bedeutet %*[iI]

NOCH MAL DANKE!!! ECHT KLASSE!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

FrageMan wrote:

> Bitte erklären Sie mir, was bedeutet %*[iI]

Es wird eine Konvertierung in den Typ char * veranlasst, in die alle
Zeichen aus dem Eingabestrom aufgenommen werden, die innerhalb der
Klammern auftauchen.  Der Stern verhindert anschließend, dass das
Ergebnis der Konvertierung einer Variablen zugewiesen wird.

von FrageMan (Gast)


Lesenswert?

Die HEX Zahl kann aus mehr als 2 Zeichen bestehen, z.B. 0xABC8, in 
diesem Fall werden nur die letzten 2 Zeichen ausgelesen, also C8.
Wie kann ich machen, dass alle Zeichen ausgelesen werden? Also nicht nur 
8, sondern auch 16 Bit Zahlen (mit 4 Hex Zeichen).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die Konvertierung konvertiert erst einmal beliebig viele Zeichen,
nicht nur 2.  Das Ergebnis wird dann aber auf die Größe von
`unsigned int' abgeschnitten, aber auch das sollten in jedem Falle
wenigstens 4 Hex-Digits sein.

Irgendwas machst du rundrum wohl falsch.

von FrageMan (Gast)


Lesenswert?

JA! Habe die Daten über UART als Byte ausgegeben! :-)
Jetzt gebe ich es als Text (Char Array) aus. Und es funktioniert!!
DANKE!!!

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.