我有以下代碼。我可以很好地完成讀取並將數據轉換爲十六進制。問題是當我發回String replyMessage = "7E81";
時,設備收到它作爲"3745"
。哪裏不對?這是由於我的編碼,還是我需要做一些轉換之前,我發回?通過java套接字發送數據的編碼問題?
w = new BufferedWriter(new OutputStreamWriter(receivedSocketConn1.getOutputStream(),"ISO-8859-15")); //
r = new BufferedReader(new InputStreamReader(receivedSocketConn1.getInputStream(),"ISO-8859-15"));
int nextChar=0;
while ((nextChar=r.read()) != -1) {
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(nextChar));
if (sb.length() < 2) {
sb.insert(0, '0'); // pad with leading zero if needed
}
String hexChar = sb.toString();
System.out.println("\n\n hex value is "+Integer.toHexString(nextChar).toUpperCase()+" "+"Int value is:"+nextChar);
message = message+hexChar;
String messageID=message.substring(2,6);
System.out.println("messageId is :"+messageID);
if(messageID.equals("0100")){
String replyMessage = "7E81";
w.write(replyMessage+"\r\n");
w.flush();
}
}
'37'是'7'字符的十六進制值,'45'是'E'字符的十六進制值。所以,你發送的字符串是「7E81」,接收器將前兩個字符(或全部)轉換爲十六進制值。你爲什麼要處理十六進制值?這是一個非常不尋常的協議。 –
因此,在我發送之前,我應該如何轉換7E變成整數先呢?所以,當它轉換它得到正確的數據? – user5313398
你需要首先解釋這個通信協議,以及你試圖用它來完成什麼。以這種方式使用十六進制值不是應該如何處理網絡通信。你試圖實現的協議究竟是什麼? –