[编织消息框架][设计协议]大小端模式

理论部分

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的数值"加"起来

理解需求

将一个数值分两段保存,读回时将两段数据读出还原

思考

为什么要转换成大小端?

对于人类来说是处理明文,但对于计算机来讲是二进制,所以要转换成二进制才能正常处理

为什么一般是大端模式?

网络传输默认是大端模式,至于为什么我也不清楚

posted @ 2017-02-26 21:15  solq321  阅读(616)  评论(0编辑  收藏  举报