2016-05-30 56 views
-3

我从串口获取温度,它给出符号而不是数字。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 + " "); 
+0

这是二进制数据 –

+0

嗯,首先,你正在读的是6字节的数据,这不是我期望的“a”数字。数据写入的格式是什么? –

+0

请帮忙获取二进制字符串 – Thambi

回答

1

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

+0

https://www.youtube.com/watch?v=hteeNdA7pOo在这个视频,它工作正常,但为什么我需要符号,请帮助我先生 – Thambi

2

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

+0

youtube.com/watch?v=hteeNdA7pOo在这个视频中,它工作正常但为什么我需要符号,请帮助我先生 – Thambi

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))); 
    } 

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

+0

为什么要在这里循环?你无条件地休息。这是否真的改变了什么?问题似乎并不是没有数据可用;数据被读取,它不能被解释为默认字符集中的字符串字节。 –

+0

@AndyTurner我故意让代码变得丑陋,因为测试'available()'通常不是很好的风格。也许除非循环和收集固定大小缓冲区的片段。它可以提供0,2,1,0,0,8,1。对我来说,串行端口有一个未知的行为 - 我不会怀疑接收到数以千计的零。 **我的代码没有有效的解决方案。** –

+0

“øøøøø”你的代码给了我这个符号,请帮我 – Thambi

相关问题