簡體   English   中英

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

然后我的 FPGA 設計中的 data_to_uart 進入塊,將這個 32 位無符號數拆分為 4 個字節,並通過 UART 將它們一一發送。 所以在終端我收到以下信息(值應該是:1000):

00000000 00000000 00000011 11101000

我的問題是:如何使用System.IO.Ports 在 c# 中正確讀取這四個字節; 並將其轉換為 int(做一些數學運算),然后轉換為字符串 - 在 label 上顯示值。

目前我正在使用:

inputData = serialPort1.ReadExisting();

以下: 二進制到十進制轉換示例對我不起作用,因為.ReadExisting 正在返回 String:(

我看了看這個:

Microsoft Docs - SerialPort 方法

我必須使用 SerialPort.ReadByte 方法嗎? 有人說它只讀取一個字節,如何讀取所有四個然后轉換為int?

我正在使用:波特率 - 115200,8 位和 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);
    }

這將從串行端口讀取四個字節並將它們轉換為 integer 變量。 請注意,緩沖區是向后填充的,因為您將二進制文件發送到 big-endian。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM