2016-05-30 54 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

相關問題