Forum: PC-Programmierung C# - Seriel: Hexwert über 127 auslesen


von tete (Gast)


Lesenswert?

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

von Marcus B. (raketenfred)


Lesenswert?

Quellcode bitte

127 ist die grenze für signed byte- falls es sowas gibt.

von tete (Gast)


Lesenswert?

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.

von bluppdidupp (Gast)


Lesenswert?

ReadChar? Evtl. SerialPort.Encoding passend setzen?

von Peter II (Gast)


Lesenswert?

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.

von tete (Gast)


Lesenswert?

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
        }

von DropsMan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.