java无符号字节流

标签 java stream

我正在制作一个使用串行端口的应用程序。问题是我控制的设备接收无符号字节范围,而我看到 java 只接受有符号字节范围。

我用谷歌搜索了如何发送,但我只知道如何接收无符号字节。

谢谢 编辑 2:@durandal 对我的代码提出的修复以接收:

 public void serialEvent(SerialPortEvent event) {
        switch (event.getEventType()) {
            case SerialPortEvent.DATA_AVAILABLE: {
                System.out.println("Datos disponibles");
                try {
                    int b;
                int disponibles = input.available();
                byte[] rawData = new byte[disponibles];
                int count = 0;
                while ((b = input.read()) != -1) {
                    if (count == disponibles - 1) {
                        break;
                    }
                    rawData[count] = (byte) b;
                    count++;

                    }
                    serial.serialDataReceived(bytesToHex(rawData), rawData);
                } catch (IOException ex) {
                    Logger.getLogger(PuertoSerie.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            break;
        }

最佳答案

一个字节就是 8 位。 Java 假定它默认已签名,但如果您愿意,您可以将其视为未签名。处理此问题的一种常见方法是使用可以存储 0 到 255 的 int 值。

// from unsigned byte
byte[] bytes = ...
int value = 255;
bytes[0] = (byte) value;

// to unsigned byte
int value2 = bytes[0] & 0xFF;
// value2 == 255

关于java无符号字节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131461/

相关文章:

c# - 如何为 XML 编写 "filter"流包装器?

java - 应用程序初始化时的启动屏幕

java - 将 Hudson 作业移至另一台服务器

c# - 在使用中包装 MemoryStream

json - 使用 JQ 从一组字符串中获取唯一字符串

android - Flutter:如何暂停和重新启动 `Stream` 监听器?

java - 除了 JMDNS,还有其他用于 bonjour/zeroconf 的 Java 库吗?

java - 客户端在浏览器中输入的日期不会保存在 java POJO 中(客户端发送的请求在语法上不正确)

java - 爱普生打印完成后如何裁纸?

scala - Scala 中有 FIFO 流吗?