最近看行业的通信协议,很是痛苦~~~
不多说了记录一些,以后好找:
关于数值:
1 我们通用的是十进制数,所以在java中 int 在范围内表示十进制的数,那么写一个0x202022; 它表示什么呢? 用十六进制为例子
int a = 100; int b = 0x20; Log.i("lllllllllllllll", a + ""); Log.i("lllllllllllllll", b + ""); Log.i("lllllllllllllll", Byte.parseByte(a + "") + ""); Log.i("lllllllllllllll", Byte.parseByte(b + "") + "");2先看下结果吧:
3 从结果来看是被解释成十进制的数了,如果一个数超过了数据类型的范围怎么办?
1 一个方式是用数组来装它了.
4 提供一个string 转化byte数组的方法和 byte数组转回来的方法
public static byte[] toBytes(String value) { if (value == null || value.trim().length() <= 0) { return null; } int len = 0; if (value.trim().length() % 2 == 0) { len = value.trim().length() / 2; } else { len = value.trim().length() / 2 + 1; } byte[] ret = new byte[len]; for (int i = 0; i < len; i++) { try { String temp = value.trim().substring(i * 2, value.length()); if (temp.length() < 2) { ret[i] = (byte) Integer.parseInt(temp, 16); } else { ret[i] = (byte) Integer.parseInt(temp.substring(0, 2),16); } } catch (Exception e) { ret[i] = 0; e.printStackTrace(); } } return ret; }
public static String toHexString(byte[] value, int index, int length) { if (value == null) return ""; StringBuffer retBuffer = new StringBuffer(); for (int i = index; i < index+length; i++) { retBuffer.append(toHexString(value[i])); } return retBuffer.toString(); }public static String toHexString(byte value) { String stmp = Integer.toHexString(value & 0xFF); return (stmp.length() == 1) ? "0" + stmp : stmp; }
5: 使用方法查看结果;
int a = 100; int b = 0x2020202; Log.i("lllllllllllllll", a + ""); Log.i("lllllllllllllll", b + ""); Log.i("lllllllllllllll", Arrays.toString(toBytes(a + ""))); Log.i("lllllllllllllll", Arrays.toString(toBytes(b + "")));
Log.i("lllllllllllllll", toHexString(toBytes(b + ""), 0, 4));
6转化可能会出些问题,请具体问题具体分析