套接字传递值为十六进制

时间:2011-04-05 03:25:04

标签: java sockets

我正在尝试将套接字中的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值?

提前感谢你们

2 个答案:

答案 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);
    }