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。
我正在尝试用 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。