java,我得到符号而不是像这样的数字������

时间:2016-05-30 08:11:20

标签: java

我从串口获得温度,而不是数字。

 try {
                    while (inputStream.available() > 0) {
                        int n = inputStream.available();
                        readBuffer = new byte[n];
                        inputStream.read(readBuffer, 0, n);
                    }
                    int i=1;
                    String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
                    String str = new String(readBuffer, "UTF-8");

                    String ye = new String(readBuffer);
                    String b = new BigInteger(1, readBuffer).toString();
                    jTextField3.setText("    " + str + "    ");

3 个答案:

答案 0 :(得分:2)

Difference.DiffFiles换成DataInputStream,然后根据需要使用readByte()readInt()方法从流中读取正确的数据类型。

答案 1 :(得分:1)

这是因为串口为您提供二进制而不是文本的值。您需要找到值的确切格式(2或4个字节,有符号或无符号,...)才能将它们正确转换为字符串。

答案 2 :(得分:0)

现在available()用于asychrone轮询,在产生正数之前可能为0。最好是以阻塞方式读取缓冲区。

 byte[] readBuffer = new byte[0];
 try {
     for (;;) {
          int n = inputStream.available();
          if (n <= 0) {
              break;
          }
          readBuffer = new byte[n];
          inputStream.read(readBuffer, 0, n);
          break;
     }
     String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
     jTextField3.setText("    \"" + y + "\"    ");
     jTextField3.setText(Arrays.toString(readBuffer)));
  }

您的字节缺少编码。最好的可能是将数据保持为字节数组。