Hallo, ich versuche uncodiert die Werte des Serialports auszulesen, leider ist alles über 127 ein "?". Wie bekomm ich C# dazu, die kompletten 8 Bit auszugeben? MfG
Quellcode bitte 127 ist die grenze für signed byte- falls es sowas gibt.
1 | void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) |
2 | {
|
3 | string bffr = ConvertToHex(serialPort.ReadExisting()); |
4 | this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { bffr }); |
5 | }
|
6 | |
7 | public string ConvertToHex(string asciiString) |
8 | {
|
9 | string hex = ""; |
10 | foreach (char c in asciiString) |
11 | {
|
12 | int tmp = c; |
13 | hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString())); |
14 | }
|
15 | return hex; |
16 | }
|
Wobei die ConvertToHex eig. einwandfrei arbeiten sollte, ich hab es mit "255" -> "ff" getestet.
Warum liest du einen String ein, wenn es sich nicht um einen String handelt? Verwende lieber ReadByte oder Read. Dann bekommst du ein Array von Zahlen.
Danke, ich habs
1 | List<byte> bBuffer = new List<byte>(); |
2 | |
3 | void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) |
4 | {
|
5 | while (serialPort.BytesToRead > 0) |
6 | bBuffer.Add((byte)serialPort.ReadByte()); |
7 | }
|
Hier ein kleines Beispiel mit C#, Forms, .Net4. Die benutzten Textboxen müssen natürlich in der Forms-Anwendung existieren.
1 | using System; |
2 | using System.Windows.Forms; |
3 | using System.IO.Ports; |
4 | |
5 | namespace SerialPortWinForms |
6 | { |
7 | public partial class Form1 : Form |
8 | { |
9 | SerialPort myport; |
10 | delegate void UpdateCallback(string s); |
11 | |
12 | public Form1() |
13 | { |
14 | InitializeComponent(); |
15 | myport = new SerialPort("com1", 9600); |
16 | myport.DataReceived += OnDataReceived; |
17 | myport.Open(); |
18 | } |
19 | |
20 | void OnDataReceived(object sender, SerialDataReceivedEventArgs e) |
21 | { |
22 | SerialPort sp = (SerialPort) sender; |
23 | textBox1.Invoke(new UpdateCallback(this.UpdateTheTextbox), sp.ReadExisting()); |
24 | } |
25 | |
26 | void UpdateTheTextbox(string s) |
27 | { |
28 | foreach (char c in s) |
29 | { |
30 | textBox1.Text += c.ToString(); |
31 | textBox2.Text += String.Format("{0:X02} ", (byte) c); |
32 | } |
33 | } |
34 | } |
35 | } |
DropsMan
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.