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

Problem in C# reading four bytes of unsigned binary number from serial port

我正在尝试用 C# 编写 GUI,以便通过 UART 将 FPGA 连接到 PC。在 FPGA 端我使用 32 位无符号数据类型:

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

然后 data_to_uart 在我的 FPGA 设计中转到将这个 32 位无符号位拆分为 4 个字节并通过 UART 将它们一一发送的块。所以在终端我收到以下信息(值应该是:1000):

00000000 00000000 00000011 11101000

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

目前我正在使用:

inputData = serialPort1.ReadExisting();

以下内容:Binary to decimal conversion example 对我不起作用,因为 .ReadExisting 正在返回字符串 :(

我看了这个:

Microsoft Docs - SerialPort Method

我必须使用 SerialPort.ReadByte 方法吗?上面写着只读一个字节,怎么把四个都读完再转成int?

我正在使用:波特率 - 115200、8 位和一个停止位。

感谢您的浏览,或许还有一些建议。 :)

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

    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);
    }

这将从串行端口读取四个字节并将它们变成一个整型变量。请注意,缓冲区是向后填充的,因为您要将二进制文件发送出 big-endian。