在C#中从串口读取四个字节无符号二进制数的问题

问题描述 投票:0回答:1

我试图用C#语言编写图形用户界面,通过UART将FPGA与PC连接起来。在FPGA端,我使用32位无符号数据类型。

data_to_uart            :   out unsigned(31 downto 0);
data_to_uart            <= to_unsigned(1000, 32);

然后在我的FPGA设计中,data_to_uart将32位无符号数据分割成4个字节,并通过UART逐一发送。因此,在终端我收到了以下内容(值应该是:1000)。

00000000 00000000 00000011 11101000

我的问题是:如何在c#中正确地读取这4个字节,通过使用 System.IO.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports.Ports; 并将其转换为 int (进行一些数学运算) 然后再转换为字符串 - 在标签上显示数值。

目前我正在使用:

inputData = serialPort1.ReadExisting();

下面是: 二进制到十进制的转换示例 对我来说是行不通的,因为.ReadExisting正在返回String :(

我看了一下这个。

Microsoft Docs - SerialPort Method

一定要用SerialPort.ReadByte方法吗?上面说它只读一个字节,请问如何读完四个字节再转换成int?

我使用的是:波特率-115200,8位和一个停止位。

感谢您的关注,也许会有一些建议:)

c# serial-port vhdl fpga uart
1个回答
1
投票

正如其他人所说,你应该使用一个协议。但要回答这个问题。

    if (serialPort1.ReadBufferSize >= 4)
    {
        var buffer = new byte[4];
        for (int i = 3; i >= 0; --i)
            buffer[i] = (byte)serialPort1.ReadByte();
        int myNumber = BitConverter.ToInt32(buffer, 0);
    }

这将会从串口读取4个字节,并把它们变成一个整数变量。请注意,缓冲区是向后填充的,因为你要把二进制发送出大字节。

© www.soinside.com 2019 - 2024. All rights reserved.