Forum: PC-Programmierung C#: Über seriellen Port Hexzahl senden


von Flo (Gast)


Lesenswert?

Hallo

Ich habe da ein Problem mit dem SerialPort in C#.

Mit der Anweisung:
1
SerialPort.Write("Hello");

kann ich problemlos Strings über die serielle Schnittstelle meines 
Computers senden. Nun habe ich jedoch das Problem, dass ich einen 
Hexwert senden will, das Argument der Methode Write() jedoch vom Typ 
String sein sollte (oder char[] / byte[] was mir auch nicht hilft).

Mit
1
SerialPort.Write("\x03");

kann ich zwar den Hexwert 0x03 senden, aber dieser Kniff funktioniert 
nur für fixe Werte. Wenn ich aber eine Integer (oder Byte) Variable 
senden will funktioniert das nicht mehr. Und eine Konvertierung mit
1
int Zahl = 5;
2
string Zeichen = Convert.ToString(Zahl);

liefert mir dann nicht die Hex5 sondern eine ASCII "5".


Wie ist sowas dennoch möglich?

von Johnny (Gast)


Lesenswert?

Versuchs mal mit einem cast, also z.B. (char)Zahl und dann dieses dem 
String hinzuzufügen.
Kannst natürlich auch mit Byte-Arrays arbeiten und dann diese mit der 
Write-Methode abschicken; würde ich empfehlen.

von Johnny (Gast)


Lesenswert?

Hier übrigens noch was kleines aus der MSDN, wie Du mit Byte-Arrays und 
Strings hantieren kannst:
http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx

von bluppdidupp (Gast)


Lesenswert?


von Christian R. (supachris)


Lesenswert?

Solange du ein Byte-Array (byte[]) benutzen kannst, ist 
BitConverter.getBytes() dein Freund.

von Kai G. (runtimeterror)


Lesenswert?

>Hexwert senden will, das Argument der Methode Write() jedoch vom Typ
>String sein sollte (oder char[] / byte[] was mir auch nicht hilft).

warum benutzt du nicht einfach Write(Byte[], Int32, Int32) mit einem 
Array mit einem Eintrag?

Keine Konvertierung, kein casten...

Gefunden unter:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.write.aspx

von Kai G. (runtimeterror)


Lesenswert?

Irgendwie so (C# ist bei mir schon was her - kann sein, dass die Syntax 
leicht anders ist)
1
int Zahl = 5;
2
SerialPort.Write(new Byte[]{(Byte) Zahl}, 0, 1);

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

is doch quatsch das als int anzulegen.

byte[] array = new byte[1];
array[0] = 0x55;
SerialPort.Write(array, 0, 1);

ist jetzt extra mal ausführlich geschrieben.

von Stefan W. (arctic)


Lesenswert?

von welchem typ ist denn das objekt SerialPort?

von Johnny (Gast)


Lesenswert?


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.