理论部分
big endian 大端模式指数据高位保存在内存低位,数据低位保存在内存高位
little endian 小端模式与大端相反
用图来说明
小结:以short类型转换为例:big endian 1至255写高八位(红色),256至65535写进低八位(黑色)
动手看看
本项目源码 PacketUtil writeLong,writeShort,writeInt,writeByte,writeBoolean
与其相应读回 readLong,readShort,readInt,readByte,readBoolean
动手实践
代码实现
以写入short类型为例说明,一个short占两个byte(ret=new byte[2]) 先在高位 ret[1] 写入低数值 ,再过通右移一个byte位写入相应的 ret[0]
1 short v = 256; 2 byte[] ret = new byte[2]; 3 ret[0] = (byte) (v >> 8); 4 ret[0 + 1] = (byte) (v); 5 6 System.out.println("低八位数值 :" +ret[0] + " 高八位数值:"+ret[1]); 7 System.out.println("=================="); 8 9 v = 1; 10 ret = new byte[2]; 11 ret[0] = (byte) (v >> 8); 12 ret[0 + 1] = (byte) (v); 13 System.out.println("低八位数值 :" +ret[0] + " 高八位数值:"+ret[1]);
低八位数值 :1 高八位数值:0
==================
低八位数值 :0 高八位数值:1
将二进制转换成数字,还是以上面代码为例
1 short n1 = (short) ((ret[0] & 0xFF) << 8); 2 short n2 = (short) (ret[0 + 1] & 0xFF); 3 short n = (short) (n1 | n2); 4 System.out.println("转换成数字 :" + n);
转换成数字 :256
一个short占两个byte 就要算出每个byte对于数值 再"加"起来
&FF 是&255 意思是执行清位数据把不必要的肮数据去掉,保留一个byte范围数值
<<8 是左移一个byte位置,还原数值
再后每个byte的数值"加"起来
理解需求
将一个数值分两段保存,读回时将两段数据读出还原
思考
为什么要转换成大小端?
对于人类来说是处理明文,但对于计算机来讲是二进制,所以要转换成二进制才能正常处理
为什么一般是大端模式?
网络传输默认是大端模式,至于为什么我也不清楚