【问题标题】:possibly lossy conversion from int to byte从 int 到 byte 的可能有损转换
【发布时间】:2015-06-22 16:16:33
【问题描述】:

我正在尝试使用 java 将十六进制数据写入我的串口,但现在我无法将十六进制数据转换为字节数组。

这是显示错误消息的代码:

static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, 0xC6, 0x1B};

这是写入串口的代码:

try {
        outputStream = serialPort.getOutputStream();
        // Write the stream of data conforming to PC to reader protocol
        outputStream.write(bytearray);
        outputStream.flush();

        System.out.println("The following bytes are being written");
        for(int i=0; i<bytearray.length; i++){
            System.out.println(bytearray[i]);
            System.out.println("Tag will be read when its in the field of the reader");
        }
} catch (IOException e) {}

我能知道如何解决这个问题吗?目前我正在使用 javax.comm 插件。谢谢。

【问题讨论】:

标签: java javax.comm


【解决方案1】:

如果您查看错误消息:

Main.java:10: error: incompatible types: possible lossy conversion from int to byte
    static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, 0xC6, 0x1B};
                                                                  ^

有一个小插入符号指向值0xC6。这个问题的原因是java的byte是有符号的,这意味着它的范围是从-0x80到0x7F。您可以通过强制转换来解决此问题:

    static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, (byte) 0xC6, 0x1B};

或者,您可以使用范围内的负值 -0x3A(相当于二进制补码表示法中的 0x36)。

【讨论】:

  • 非常感谢解决了我的问题。但只是为了将来参考,我可以知道你所说的小插入符号是什么意思。有没有办法找出来?谢谢。
  • @user3833653 在错误消息中,当在javac 上编译时,有一点^ 将指向语法错误的部分。您可以在包含错误的代码块中看到它。在 IDE 中,您应该会看到类似于文字处理器中的拼写错误的红色下划线。
  • 其实 oxC6 应该是十进制的 198,但是在我把它显示为 58 或 -58 的字节之后我的。我能知道如何解决这个问题吗? @hexafraction
  • -58 in 2s 补码与 198 无符号位的模式相同。
【解决方案2】:

尝试像这样转换0xC6,因为字节范围是从-0x800x7F

static byte[] bytearray = {0x02, 0x08, 0x16, 0x0, 0x00, 0x33, (byte) 0xC6, 0x1B};

【讨论】:

  • 这有助于解决我的错误,但它没有得到我正在寻找的答案。实际上,C6 应该是十进制的 198,但是在添加前面的字节后,如你所说,我得到 -58 十进制值。我能知道如何解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 2020-03-12
  • 2015-02-28
  • 2014-08-02
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多