我有以下结构
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 方法允许我写入字符串数据,如何通过端口传递此结构内容?我是否必须将数据转换为字符串格式?如果是这样,我如何实现它?还有其他办法吗?
答案 0 :(得分:1)
您可以简单地序列化它,可以使用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()
来获取包含所有结构值的逗号分隔的字符串,然后可以在设备中将其分隔。