读书人

java 大小端储存模式 转化

发布时间: 2012-09-27 11:11:17 作者: rapoo

java 大小端存储模式 转化
 所谓的大端模式:是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式
  所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致

例如: 下面是小端。将低位存储在低位。intel就是这么干的

/**      * int to byte[] 支持 1或者 4 个字节      * @param i      * @param len      * @return      */       public static byte[] intToByte(int i,int len) {              byte[] abyte=null;              if(len==1){                  abyte = new byte[len];                  abyte[0] = (byte) (0xff & i);              }else{                  abyte = new byte[len];                  abyte[0] = (byte) (0xff & i);                  abyte[1] = (byte) ((0xff00 & i) >> 8);                  abyte[2] = (byte) ((0xff0000 & i) >> 16);                  abyte[3] = (byte) ((0xff000000 & i) >> 24);              }              return abyte;          }         public  static int bytesToInt(byte[] bytes) {             int addr=0;             if(bytes.length==1){              addr = bytes[0] & 0xFF;             }else{                 addr = bytes[0] & 0xFF;                 addr |= ((bytes[1] << 8) & 0xFF00);                 addr |= ((bytes[2] << 16) & 0xFF0000);                 addr |= ((bytes[3] << 24) & 0xFF000000);             }             return addr;          }  



下面是大端: 一般网络传输都是这么干的!
/** * int to byte[] 支持 1或者 4 个字节 * @param i * @param len * @return */ public static byte[] intToByte(int i,int len) {        byte[] abyte=null;        if(len==1){        abyte = new byte[len];        abyte[0] = (byte) (0xff & i);        }else{        abyte = new byte[len];        abyte[0] = (byte) ((i >>> 24) & 0xff);        abyte[1] = (byte) ((i >>> 16) & 0xff);        abyte[2] = (byte) ((i >>> 8) & 0xff);        abyte[3] = (byte) (i & 0xff);        }        return abyte;    }   public  static int bytesToInt(byte[] bytes) {   int addr=0;   if(bytes.length==1){        addr = bytes[0] & 0xFF;   }else{   addr = bytes[0] & 0xFF;   addr = (addr << 8) | (bytes[1] & 0xff) ;   addr = (addr << 8) | (bytes[2] & 0xff) ;   addr = (addr << 8) | (bytes[3] & 0xff) ;   }   return addr;    }


ps: 本人比较菜,具体那些东西是大端干的,那些是小端干的,不太清楚,谢谢!!

读书人网 >编程

热点推荐