我有以下代码。我可以很好地完成读取并将数据转换为十六进制。问题是当我发回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
你需要首先解释这个通信协议,以及你试图用它来完成什么。以这种方式使用十六进制值不是应该如何处理网络通信。你试图实现的协议究竟是什么? –