serielle Schnittstelle auslesen (bisher nur Kryptische Daten erhalten)
-
Hallo Simon,
danke für den Vorschlag, das habe ich mir auch schon angeschaut.
Aber da es bisher bis auf die "Übersetzung" alles prima und ohne Probleme lief, dachte ich, es wäre einfach nur notwenidig eine weitere Zeile o.ä. einzufügen, damit ich korrekte Werte angezeigt bekomme.Wenn das nicht der Fall ist, müsste ich wohl auf eine Library zurück greifen.
Danke dir
-
Also...
Ein Problem ist, dass buf für 7 char Platz hat.
Dann später (in der zweiten Schleife) greifst Du aber bis zu Index 28 -1 auf den Buffer zu. Du darfst nur soviele Bytes aus dem Buffer lesen, wie maximal drin sein können. Ausserdem ist es ratsam den Buffer zu initialisieren (z.B. mit char buf[7] = { };)Ausserdem benutzt Du zweimal i für die Schleifen!
Simon
Edit: Was erwartest Du denn für eine Ausgabe? Schreibs mal hin.
-
Hi,
also wie du oben im Quelltext sehen kannst, habe ich buf initialisiert und zwar genauso, wie du es vorgeschlagen hast!
Ich erwarte an Daten:
44 00 B4 E8 54 69sowas in der Art.
Habe jetzt für die 2. Schleife eine neue Laufvariable gewählt.Danke
-
Also läufts jetzt?
-
Nein, leider noch nicht.
Die Änderungen haben bis jetzt nichts an der Ausgabe geändert.
-
Lies mal nach wie man mit printf(..) hex ausgibt oder noch besser benutze std::iostream mit std::hex.
Stehen denn im Buffer die richtigen Werte? Benutze dazu den Debugger.
Zeige mal den korrigierten Code (aber ReadFile(...)).Simon
-
Hier der korrigierte Teil:
char buf[7];
DWORD read =0;ReadFile(hCom, buf, sizeof(buf),&read,NULL);
DWORD i;for(i=0; i<read; i++)
{
for (int i2=0; i<8; i++)
{
printf("%i ", (unsigned char)buf[i]);
m_stranzeige += buf;
}}
Im buffer stehen die gleichen Werte, die dann auch ausgegeben werden, leider die falschen bzw. nicht in der Form, in der ich Sie haben will. (Habe ich per Debugger geprüft)
Lese mich jetzt in io::stream ein, vielleicht ist das ja die Lösung!!
Danke
-
- Benutze bitte die [cpp]-Tags. Das macht deinen Code dreimal lesbarer.
- Bist du sicher dass du im richtigen Forum bist? Du schreibst erstens nur mit C-Funktionen (printf) statt der C++-Funktionen, zweiten hantierst du mit WinAPI oder ähnlichem rum, wofür es auch ein eigenes Forum gibt. In diesem Bereich gehts eigentlich nur um Standard-C++ Fragen...
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
sorry, werde ab jetzt die [cpp]-Tags benutzen.
das mit printf, war nur ein versuch, der aber leider nicht funktionierte.
bekomme meine Werte einfach nicht wie gewünscht ausgegeben.
-
1. Wofür brauchts Du die ineinander verschaltelten Schleifen? Du brauchst sie nicht.
2. in den for Schleifen inkrementierst Du beides mal i -> Fehler!
3. buf ist immer noch nicht initialisiert.Ich schlage Dir vor erstmal ein Buffer anzulegen, zu initialisiern, von Hand mir Werten füllen (à la buf[0] = 0x12) und den dann auszugeben.
Dein Problem hat, denke ich, (noch) nichts mit der seriellen Schnittstelle zu tun.
Simon
-
Warum versuchst du nicht eine Klasse dafür zu verwensen, welche die WinApi funktionalität kapselt,
ich kann mich erinnern, dass mynonA und AJ mal eine solche Klasse geschrieben haben, dies sollte dein Vorgehen vereinfachen können.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39312-and-highlight-is-str%F6me+lenken.html
-
Das problem liegt (noch) nicht dort...
-
@EvilDaddy: danke für den Vorschlag, aber für mich leider das falsche. Versuche ja lediglich den Port auszulesen und zwar auf Hex Basis.
@theta: habe eine Schleife rausgenommen und versucht buf zu initialisieren....
leider bekomme ich nichtmal jetzt eine vernünftige ausgabe obwohl ich den ReadFile - Teil erstmal rausgenommen habe
bastle jetzt an der initialisierung, dass das dann zumindest erstmal läuft.danke soweit schonmal!
-
per Debugger bekomme ich immer nur "|||||" als Variablen-Inhalt angezeigt
-
Zeige deinen Code...
-
char buf[7]; DWORD read =0; DWORD i=1; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; for(i=0; i<read; i++) { std::cout << std::hex << buf << std::endl; }Hab mal den std::hex Teil versucht, aber läuft genauso wenig wie meine vorherige Variante.
Danke nochmals für alle Eure Mühen.
-
1. Dein Buffer hat 7 Plätze, Du greifst aber auf den 8. ten zu
Fehler
2. In der Schleife musst Du die Elemente einzeln rausholen mit buf[i] und nicht einfach buf
Edit:
3. Du initialisierst read auf 0
Schleife wird 0 mal durchlaufen.char buf[8] = { }; buf[0] = .. . . . buf[7] = ... DWORD read = 8; for(int i=0; i < read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl; }
-
Erstmal danke theta.
zu 1. du hast natürlich Recht, das habe ich so garnicht gesehen! (dummer Fehler!!)
2. und 3. habe meinen Code, nach deinen Vorgaben abgewandelt, aber bekomme keine meine vorher Definierten Werte, die ich für "buf" definiert habe ausgegeben.
Lediglich wieder komische kryptische Zeichen.Hier der abgewandelte Code:
char buf[8]; DWORD read =8; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; for(int i=0; i<read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl; }
-
Post mal die kryptischen Zeichen... bei mir gehts nämlich.
Ausserdem... warum initialisierst Du buf nie?
Das geht so char buf[7] = { };Simon