我有一台以[stx]..data...[etx]
有没有办法使用serialport.readto()
函数将数据读取到[etx]
?
byte test = sp.ReadByte();
if (test == 0x02 && comOpen)
{
string indata = sp.ReadTo("");
watch = "\n" + indata;
SetText(watch);
process_data(indata);
sendack(0x06);
}
每次发送数据时数据量都会有所不同。
我发现serialport.read()
函数的实现很典型:)。那么有什么方法可以使用serialport.readto()
函数来读取传入流中的数据吗?
任何建议都会非常有用。
答案 0 :(得分:0)
如果etx是多个字节,您需要将其与缓冲区进行比较,以了解何时收到传输结束。
示例:
// Set to whatever ending marker is used in your scenario.
var endingMarker = new byte[] { 0x01, 0x02, 0x03 };
var buffer = new List<byte>();
// Continue to read until ending marker is read.
while (!endingMarker.SequenceEqual(buffer.Skip(Math.Max(0, buffer.Count - endingMarker.Length))))
{
// Read one byte to the buffer.
buffer.Add(sp.ReadByte());
}
// Remove ending marker.
var result = buffer.Take(buffer.Count - endingMarker.Length).ToArray();
答案 1 :(得分:0)
通过在sp.readto()函数中使用“\ u0003”来解决此问题。
sp.readto("\u0003")