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?
vom ankommenden String Position 2-4 und 6-8 in einen neuen String packen und umwandeln -> fertig
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 | }
|
SUPER!! DANKE! HAT GEKLAPP! Bitte erklären Sie mir, was bedeutet %*[iI] NOCH MAL DANKE!!! ECHT KLASSE!
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.
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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.