Hex über serielle Schnittstelle ausgeben
-
Hi,
wie kann ich einen String aus Hex-Zahlen, die jeweis aus 8 Bit bestehen an der seriellen Schnittstelle ausgeben (z.B. 4B 31 23). Ich habe bisher die Funktion
serialPort1->Write("4B");
benutzt. Aber so wie ichs jetzt geschrieben hab schickt er erst die Hex-Zahl für die ASCII 4 (also 34) und dann für ASCII B (also42) raus.
Und anders kann icih write keine Befehle geben, da es String^ erwartet. D.h. wenn ich Write("K") eingebe, kommen meine 4B raus, die ich ausgeben will. Aber ich kann nich alle Zahlen, die ich schicken will mit ihrem ASCII-Zeichen eingeben.
Wie könnte ich es also machen, dass ich Hex-Zahlen eingebe und diese auch genau so rausgeschrieben werden?
Danke!
Gruß, Julian
-
jf87k schrieb:
Und anders kann icih write keine Befehle geben, da es String^ erwartet.
Stimmt doch gar net, die Funktion ist überladen.
-
Hi!
Write kann auch andere Formate als String schicken:
http://msdn2.microsoft.com/de-de/library/system.io.ports.serialport.write(VS.80).aspxAnsonsten gibst du Hex-Werte mit einem führenden "0x" an:
int Wert = 0x4B;
Gruß
-
Stimmt du hast recht. Ich kann auch
Write(cli::array<unsigned char,1> ^buffer, int offset, int count);
oder
Write(cli::array<_wchar_t,1>^buffer, int offset, int count);
eingeben. Aber ich hab noch nich so viel Ahnung und weiß auch nicht, wie ich da die Hex-Werte ausgeben kann. Gibts mit den anderen Überladungen denn eine einfache Möglichkeit?
Grüße
-
@nibbler
Wie man einen Hex-Wert in int darstellt weiß ich, aber des bringt mir grad auch nix.
Deinen Link versteh ich nicht so wirklich. Wie funktioniert denn das mit Offset und Ausgabepuffer. Was muss ich da denn hinschreiben und wo vor allem muss ich die Werte hinschreiben, die ich ausgeben will?
-
Vielleicht gehts so:
Puffer erstellen:
Byte b[] = {0x00, 0x12, 0x34, 0x56, 0xAA, 0x55, 0xFF};
Die Parameter sind doch erklärt:
Parameter buffer Das Bytearray, in das die Ausgabe geschrieben werden soll. offset Der Offset im Pufferarray, ab dem geschrieben werden soll. count Die Anzahl der zu schreibenden Bytes.
-
Ok, ich habs mal probiert, krieg aber den Fehler:
Konvertierung des Parameters 1 von 'unsigned char [3]' in 'cli::array<Type, dimension> ^' nicht möglich.mein Quelltext war so:
Byte b[]={0x01, 0x12, 0x4B}; serialPort1->Write(b, 0, 3);
Also irgenwas läuft falsch. Für count hab ich halt mal 3 eingegeben, weil ich 3 Zahlen schicken will. Für Offset hab ich mal 0 genommen, den versteh ich eh nicht so wirklich.
-
Ok, lange bin ich ja auch noch nicht dabei...
Versuch mal das hier:
array<Byte^>^ b = gcnew array<Byte^>(3); b[1] = Convert::ToByte(0x01); b[2] = Convert::ToByte(0x12); b[3] = Convert::ToByte(0x4B); serialPort1->Write(b, 0, 3);
Geht das?
-
Jetzt hab ich den Fehler:
Konvertierung des Parameters 1 von 'cli::array<Type> ^' in 'cli::array<Type, dimension> ^'nicht möglich
Trotzdem danke:)
-
Dann vermute ich mal, dass es nicht Byte sein sollte sondern ein anderer Datentyp.
Deine Fehlermeldung (hast ja nur nen Teil gepostet) sollte allerdings mehr aussagen?!
-
Da fehlt halt noch was mit dimension, was auch immer des is. So heißt die komplette Fehlermeldung:
error C2664: 'void System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> ^,int,int)': Konvertierung der Parameters 1 von 'cli::array<Type> ^'in cli::array<Type,dimension> ^' nicht möglich
-
array<Byte^,1>^ b = gcnew array<Byte^>(3);
Versuchs mal so.
-
Hi,
hast du das jetzt irgendwie ans laufen bekommen?
Wenn ja, wie?Gruß
-
Hallo,
bei mir (Visual C++ 2005 Express) funktioniert es so:
cli::array<unsigned char,1>^ a={0x0A,0xAB,0x20,0x0A}; serialPort1->Open(); serialPort1->Write(a,0,4);