2017-04-12 52 views
0

如果輸入字符串數據,我的代碼會正確地發送/讀取數據。如果數據是十六進制,雖然我的串行發送/讀取數據正確的textview輸出是奇怪的。爲什麼奇怪的符號出現在Android屏幕上?爲什麼奇怪的符號出現在Android屏幕上?

我的輸入:

0067123456789123456789123456FF8E6457DF0215DF820803111111DF820903222222DF820A03333333DF6F3CDFEF0602AAAADFEF0B08BBBBBBBBBBBBBBBBDFEF0E20CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDFEF0402DDDD1D 

我接收到的數據的方法:

private void updateReceivedData(byte[] data) throws InterruptedException { 

    String s = new String(data); 
    text2.setText("Incoming Mesage = " + s); 
    SendSerialData(data, data.length); 

} 

我上Hterm(TRUE)串行輸出:

0067123456789123456789123456FF8E6457DF0215DF820803111111DF820903222222DF820A03333333DF6F3CDFEF0602AAAADFEF0B08BBBBBBBBBBBBBBBBDFEF0E20CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDFEF0402DDDD1D 

我的TextView輸出:

��g4Vx�#Eg�4V��dW�߂߂ """߂ 
333�o<���������������� 
������������������������������������ 
+0

它看起來像你有一個字符編碼的問題。看到[這裏](http://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string-and-vice-versa) –

+0

謝謝,但它對我沒有用 –

回答

0

我找到答案。相反的:

String s = new String(data); 

用途:

String s = byteArrayToHex(data); 

並添加以下方法:

public static String byteArrayToHex(byte[] a) { 
    StringBuilder sb = new StringBuilder(a.length * 2); 
    for(byte b: a) 
     sb.append(String.format("%02x", b)); 
    return sb.toString(); 
} 
相關問題