背景 :
项目程序中用到需要socket 传输指令到C++程序中,需要TCP 的连接方式。 所以就想到用socket 来连接 。
问题:
c++ 接收字节和字节的大小都是有严格要求的, 需要传输规定长度的无符号的指令。那么问题来了, Java程序中byte类型都是有符号的,长度在-128 到127之间。 而C++中 可以定义 unsigned char 设置无符号数据类型。
实现方法:
public static byte[] tolh(int n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
可以看到 输入 int =0xff 返回 byte[] b={-1,0,0,0}
但是这只能解决传输int 类型的数据, 那么像String 类型的数据 怎么转换的 。
char[] chr=String.toCharArray(); // String 先转char 类型
/**
* char[] 转byte[]
*
* @param chars
* @return
*/
public static byte[] getBytes(char[] chars) {
Charset cs = Charset.forName("ISO8859-1"); // 编码类型用ISO8859-1
CharBuffer cb = CharBuffer.allocate(chars.length);
cb.put(chars);
cb.flip();
ByteBuffer bb = cs.encode(cb);
return bb.array();
}
OK,这样String 类型数据也就可以传输了 。