我正在尝试将套接字中的String值传递给另一台服务器。另一台服务器应该以十六进制格式接收值。
即如果我的字符串在服务器上是s =“600185838e”,它应该收到60 01 85 83 8e,但是我发送的这些值已被转换为ASCII&不是所需的格式。
我正在使用套接字连接
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
wr.write(messageBody);
wr.flush();
如何发送类似Hex值的String值?
提前感谢你们
答案 0 :(得分:5)
您应该convert the hex string to byte array然后将其作为字节数组发送:
OutputStream out = this.socket.getOutputStream();
out.write(yourBytearray);
这是将十六进制字符串转换为byte []的方法,这是我给出的链接的副本,但我在这里复制它以明确我在说什么:
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
答案 1 :(得分:0)
您还可以尝试将字符串拆分为2个字符的长字符串,并通过Byte.parseByte(my2CharString,16)将它们转换为单个字节,然后发送它们
这里有一些代码可以做你想要的,只需用write()&lt;替换System.out.println() - 必须只写一个字节:
String output = "ffee101";
while(output.length() > 0){
String byteToWrite;
if(output.length() <= 2){
byteToWrite = output;
output = "";
}
else{
byteToWrite = output.substring(0,2);
output = output.substring(2);
}
byte b = (byte)Short.parseShort(byteToWrite, 16);
System.out.println(b);
}