首页 > 解决方案 > 如何在处理中以与 C# 相同的方式读取串行数据?

问题描述

在 C# 中,我使用 SerialPort Read函数,如下所示:

byte[] buffer = new byte[100000];
int bytesRead = serial.Read(buffer, 0, 100000);

在处理中,我这样使用readBytes

byte[] buffer = new byte[100000];
int bytesRead = serial.readBytes(buffer);

在处理中,当我从readBytes函数遍历缓冲区数组时,我得到了不正确的字节值,但是当我只使用常规读取函数时,我得到了正确的值,但我无法将数据抓取到字节数组中. 我在导致我在缓冲区数组中获取错误值的代码的处理版本中做错了什么?

我在两个版本中都以相同的方式打印出数据:

for(int i=0; i<bytesRead; i++){ 
    println(buffer[i]); 
}

C# 正确输出: 在此处输入图像描述 处理不正确的输出: 在此处输入图像描述

标签: javac#byteprocessing

解决方案


Java 字节是有符号的,所以任何超过 128 的值都会溢出。

一个快速的解决方案是

int anUnsignedByte = (int) aSignedByte & 0xff;

到您的每个字节。


推荐阅读