为什么奇怪的符号出现在Android屏幕上?

问题描述:

如果输入字符串数据,我的代码会正确地发送/读取数据。如果数据是十六进制,虽然我的串行发送/读取数据正确的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://*.com/questions/1536054/how-to-convert-byte-array-to-string-and-vice-versa) –

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