c# - 如何通过串口编写结构?
问题描述
我有以下结构
unsafe public struct usb_board
{
UInt16 scr_id;
UInt16 cmd_id;
uint type;
UInt16 size;
UInt16 crc;
uint [] buffer;
}
我需要将整个结构写入串行端口。
串口连接如下:
System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write("Some String Data");
port.Write方法允许我写入字符串数据,我如何通过端口传递这个结构内容?我必须将数据转换为字符串格式吗?如果是这样,我该如何实现?还有其他方法吗?
解决方案
你可以简单地序列化它,你可以使用 Json,或者创建你自己的序列化:
string json = Newtonsoft.Json.JsonConvert.SerializeObject(your_object);
System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write(json);
如果很难在您的设备(或任何接收器)中解析 json,您可以自己创建一个序列化:
unsafe public struct usb_board
{
UInt16 scr_id;
UInt16 cmd_id;
uint type;
UInt16 size;
UInt16 crc;
uint[] buffer;
public override string ToString()
{
return $"{scr_id},{cmd_id},{type},{size},{crc},{string.Join(",", buffer)}";
}
}
然后,您可以使用your_object.ToString()
获取所有结构值的逗号分隔字符串,并且可以在设备中将其分隔。
推荐阅读
- google-analytics - 将加载旧版本的容器
- jquery - 我如何定位表的第二个 td 中的输入标签(输入标签是根据用户需要动态附加的)
- android - Undo/Redo with Canvas Bitmap drawing (KOTLIN)
- regex - 正则表达式去除所有链接,除了包含 xxx 字的链接
- angular - 在 WebStorm 中显示 codelyzer 错误
- python - 选择我希望列中的值具有多个值的行
- qt - 在 QML 中动态更改 Material 主题
- python - 从 Python 列表中提取数据
- java - Spring JMS ActiveMQ 消息传递的咨询主题不起作用
- docker - jenkins-pipeline 中 DockerBuilderPublisher 的 cleanupWithJenkinsJobDelete 有什么用?