用ServerSocket接收客户端消息,并返回给客户端,客户端是用C写的,数据的传输是16进制的数据,中间会涉及到字符串的拼接,就会遇到一些坑
字节数组的理解
数据传输必定要以IO流方式传输,并且是以二进制字节流方式,传输前要把要传输的数据转成字节数组,同样的数据,通过不同方式得到的字节数组结果不同(在计底层都是"111111001111111"的二进制),如图:
Java中,getBytes()方法的得到的字节数组,数组内元素是对每个字符当作一个ASCII字符转成对于的十进制
HexConvertUtil.hexStringToBytes(str),是把两个字符当作一个16进制字符对应的十进制 ,比如 7E–>126 7F–>127 这正是设备之间传输需要的字节数组,
16进制数据转字节数组的坑(切记勿用小写)
16进制是不区分大小写的,但是在拼接返回数据时,小写会导致返回的数据不正确,当时我在用StringBuffer拼接数据,被拼接的数据,转为字节数组,字节数组里的元素为-1,并不是想要的结果,如图:
小写:
大写:
可能会需要的工具类
/**
* Created by Administrator on 2019/1/5.
*/
public class HexConvertUtil {
/**
* 在进制表示中的字符集合
*/
final static char[] digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A'