服务器端是C++写的,我请求服务器的时候给服务器发送十六进制的数据包,同时服务器端给我返回相应的十六进制数据包,如何让它显示成十六进制啊
package com.netunit.workbench.socket;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
/**
* 客户端

* @author 何明

*/ public class MyClient {
private Socket socket;
private BufferedReader br;
public MyClient() {
try {
socket = new Socket("192.168.0.132", 7838);
System.out.println("connection ok");
byte[] b = new byte[16];
b[0] = (byte) 0x55;
b[1] = (byte) 0xAA;
b[2] = (byte) 0x01;
b[3] = (byte) 0x01;
b[4] = (byte) 0x00;
b[5] = (byte) 0x00;
b[6] = (byte) 0x00;
b[7] = (byte) 0x00;
b[8] = (byte) 0x00;
b[9] = (byte) 0x00;
b[10] = (byte) 0x00;
b[11] = (byte) 0x00;
b[12] = (byte) 0x00;
b[13] = (byte) 0x00;
b[14] = (byte) 0x00;
b[15] = (byte) 0x00;
OutputStream socketWriter = socket.getOutputStream();
socketWriter.write(b);
System.out.println("OK");
socketWriter.flush();
// 打印从服务器端传来的消息
// String str = null;
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
// System.out.println("正在接收从服务器端发过来的消息");
// str = br.readLine(); C socket 发送的数据中没有换行符.
// 所以这句就一直阻塞住,不能继续运行.
// 
// if(str != null){
// 
// System.out.println(str);
// 
// }
char[] buf = new char[1024];
int int_buf = -1;
while ((int_buf = br.read(buf)) != -1) {
String s = new String(buf);
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}public static void main(String[] args) {
new MyClient();
}
}

解决方案 »

  1.   

    java里,
    Integer.toHexString(12345)
    可以直接得到10进制数的16进制表示的字符串
      

  2.   


    Integer.parseInt(s, radix)第一个参数是待转换的数字,Radix是进制数,你这里用16。
      

  3.   

    System.out.println(s); 
    打印出来的是乱骂,能转换吗?我是从SERVER端得到一个十六进制的数据包
    发送55 aa 01 01 00 00 00 00 00 00 00 00 00 00 00 00返回55 AA 01 FF 23 FF 1B 1B 1B FF FF FF FF FF FF FF FF FF FF 01 FF 05 FF FF 27 FF FF FF FF FF FF FF FF FF FF FF 01 FF 05 FF FF FF FF FF FF 03 00 00 00 00 55 AA 02 FF 1B FF FF FF 1E FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 
      

  4.   

    System.out.println(s); 
    打印出来的是乱骂,能转换吗?我是从SERVER端得到一个十六进制的数据包 
    发送55 aa 01 01 00 00 00 00 00 00 00 00 00 00 00 00返回55 AA 01 FF 23 FF 1B 1B 1B FF FF FF FF FF FF FF FF FF FF 01 FF 05 FF FF 27 FF FF FF FF FF FF FF FF FF FF FF 01 FF 05 FF FF FF FF FF FF 03 00 00 00 00 55 AA 02 FF 1B FF FF FF 1E FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 
      

  5.   

    InputStream inputStream = socket.getInputStream();

    byte [] by = new byte[100];

    inputStream.read(by);

    for(int i = 0; i < by.length ; i++){

    System.out.println(Integer.toHexString(by[i]& 0XFF));

    if(i%10==0) System.out.println();

    }