从串行端口 c# 以二进制形式读取字节



如何将字节读取为二进制而不是ASCII并写回二进制?

private void ReadPort()
{
while (_keepReading)
{
if (_serialPort.IsOpen)
{
byte[] readBuffer = new byte[_serialPort.ReadBufferSize + 1];
try
{
int count = _serialPort.Read(readBuffer, 0, _serialPort.ReadBufferSize);
String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer,0,count);
DataReceived(SerialIn);
}
catch (TimeoutException) { }
}
else
{
TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50);
Thread.Sleep(waitTime);
}
}
}

当指定_serialPort.ReadBufferSize并执行_serialPort.Read()时,直到接收到的数据达到_serialPort.ReadBufferSize(至少 4096 字节(,这意味着_serialPort.Read()等待或发生timeout exception

那么回写是否意味着以二进制方式回显到接收它的同一串行端口?

在呈现的源代码中,接收到的数据被converted to an ASCII string并传递给DataReceived()函数。

处理和问题文本不匹配。哪个是正确的?
还是要将接收到的数据输出到控制台或窗口文本框?

此外,如果要写回接收到的数据,则函数名称ReadPort()不合适,因为它仅表示处理的一半。

请澄清并详细说明您要做什么,并将其添加到问题文章中。


例如,如果要从串行端口接收数据并回显到同一端口,则过程将是:

byte[] Buffer = new byte[1];
TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50);
while (_keepReading)
{
if (_serialPort.IsOpen)
{
try
{
int count = _serialPort.Read(Buffer, 0, 1);
if (count > 0)
{
_serialPort.Write(Buffer, 0, 1);
}
}
catch (TimeoutException) { }
catch (Exception) { }
}
else
{
Thread.Sleep(waitTime);
}
}

最新更新