gpt4 book ai didi

c# - C#中如何读取字节

转载 作者:太空狗 更新时间:2023-10-30 00:44:10 25 4
gpt4 key购买 nike

我正在尝试处理我的传入缓冲区并确保我在每次传输时都获得了所有 125 字节的数据。我创建了一个字节数组。我怎么知道正在接收 125 字节的数据。我尝试显示字节数,但它显示的数字不同,我不确定它是否是获取接收到的字节数的正确编码。

这是我的代码:

void datareceived(object sender, SerialDataReceivedEventArgs e)
{
myDelegate d = new myDelegate(update);
listBox1.Invoke(d, new object[] { });
}


public void update()
{
Console.WriteLine("Number of bytes:" + serialPort.BytesToRead); // it shows 155

while (serialPort.BytesToRead > 0)
bBuffer.Add((byte)serialPort.ReadByte());
ProcessBuffer(bBuffer);
}

private void ProcessBuffer(List<byte> bBuffer)
{
// Create a byte array buffer to hold the incoming data
byte[] buffer = bBuffer.ToArray();

// Show the user the incoming data // Display mode
for (int i = 0; i < buffer.Length; i++)
{
listBox1.Items.Add("SP: " + (bBuffer[43].ToString()) + " " + " HR: " + (bBuffer[103].ToString()) + " Time: ");
}
}

最佳答案

目前您正在阅读直到本地接收缓冲区 ( BytesToRead ) 为空,然而,更好的方法是保留缓冲区和偏移量,并循环直到您有 你需要什么,即使这意味着等待 - 即

byte[] buffer = new byte[125]
int offset = 0, toRead = 125;

...

int read;
while(toRead > 0 && (read = serialPort.Read(buffer, offset, toRead)) > 0) {
offset += read;
toRead -= read;
}
if(toRead > 0) throw new EndOfStreamException();
// you now have all the data you requested

关于c# - C#中如何读取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com