C# Serial Port reading HEX data

做~自己de王妃 提交于 2019-12-10 10:56:00

问题


I am writing a C# application to read from several serial COM ports at the same time to analyze the data communication of an IPOD. The data being sent needs to be interpreted as HEX bytes. For example,

0xFF 0x55 0x01 0x00 0x04 0xC3 0xFF 0x55 ...

I want to be able to read this and display it in a rich textbox, for example

0xFF 0x55 0x01 0x00 0x04 0xC3
0xFF 0x55 ... 

The start of a command includes a header (0xFF 0x55) and the rest is is the command + parameters + checksum.

What is the best way to go about this?

I currently have:

private delegate void SetTextDeleg(string text);

void sp_DataReceivedRx(object sender, SerialDataReceivedEventArgs e)
{
    Thread.Sleep(500);
    try
    {
        string data = IPODRxPort.ReadExisting(); // Is this appropriate??
        // Invokes the delegate on the UI thread, and sends the data that was received to the invoked method.
        // ---- The "si_DataReceived" method will be executed on the UI thread which allows populating of the textbox.
        this.BeginInvoke(new SetTextDeleg(si_DataReceivedRx), new object[] { data });
    }
    catch
    { }
}

private void si_DataReceivedRx(string data)
{
    int dataLength = data.Length*2;
    double numLines = dataLength / 16.0;
    for (int i = 0; i < numLines; ++i)
        IPODTx_rtxtBox.Text += "\n";

    IPODRx_rtxtBox.Text += SpliceText(convertAsciiTextToHex(data), 32) + "\n"; 
}

I can read data, but it is not in the appropriate format.

Im just not sure what the best way to get the hex data from the com port and display it line by line by command based on the command header (0xFF 0x55).

Any Suggestions?


回答1:


Alex Farber's method works. Below is my code example:

SerialPort sp = (SerialPort) sender;
// string s = sp.ReadExisting();
// labelSerialMessage.Invoke(this.showSerialPortDelegate, new object[] { s });

int length = sp.BytesToRead;
byte[] buf = new byte[length];

sp.Read(buf, 0, length);
System.Diagnostics.Debug.WriteLine("Received Data:" + buf);

labelSerialMessage.Invoke(this.showSerialPortDelegate, new object[] { 
    System.Text.Encoding.Default.GetString(buf, 0, buf.Length) });


来源:https://stackoverflow.com/questions/21548828/c-sharp-serial-port-reading-hex-data

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!