Android中int,short,long和byte的转换

import java.nio.ByteOrder;
 
public class BytesTransUtils {
 
      private String TAG = "BytesTransUtils" ;
      private static BytesTransUtils instance = null ;
     
      private BytesTransUtils() {
       // Log.i(TAG, "instance BytesTransUtils");
      }
     
      public static BytesTransUtils getInstance() {
           if (instance == null ) {
               instance = new BytesTransUtils();
           }
           
           return instance;
      }
     
      public boolean testCPU() {
           if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {
                // System.out.println("is big ending");
                return true ;
           } else {
                // System.out.println("is little ending");
                return false ;
           }
      }
     
      public byte [] getBytes( short s, boolean bBigEnding) {
           byte [] buf = new byte [ 2 ];
           
           if (bBigEnding){
                for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                     buf[i] = ( byte ) (s & 0x00ff );
                     s >>= 8 ;
                 }
           }
           else {
                for ( int i = 0 ; i < buf.length; i++) {
                     buf[i] = ( byte ) (s & 0x00ff );
                     s >>= 8 ;
                }
           }
           
           return buf;
      }
     
      public byte [] getBytes( int s, boolean bBigEnding) {
           byte [] buf = new byte [ 4 ];
           
           if (bBigEnding) {
                for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                     buf[i] = ( byte ) (s & 0x000000ff );
                     s >>= 8 ;
                }
           } else {
                System.out.println( "1" );
                for ( int i = 0 ; i < buf.length; i++) {
                     buf[i] = ( byte ) (s & 0x000000ff );
                     s >>= 8 ;
                }
           }
           
           return buf;
      }
     
      public byte [] getBytes( long s, boolean bBigEnding) {
           byte [] buf = new byte [ 8 ];
           
           if (bBigEnding) {
                for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                     buf[i] = ( byte ) (s & 0x00000000000000ff );
                     s >>= 8 ;
                }
           }
           else {
                for ( int i = 0 ; i < buf.length; i++) {
                     buf[i] = ( byte ) (s & 0x00000000000000ff );
                     s >>= 8 ;
                }
           }
           
           return buf;
      }
     
      public short getShort( byte [] buf, boolean bBigEnding) {
           if (buf == null ) {
               throw new IllegalArgumentException( "byte array is null!" );
           }
           
           if (buf.length > 2 ) {
               throw new IllegalArgumentException( "byte array size > 2 !" );
           }
           
           short r = 0 ;
           if (bBigEnding) {
               for ( int i = 0 ; i < buf.length; i++) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x00ff );
               }
           } else {
               for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x00ff );
               }
           }
         
           return r;
      }
     
      public int getInt( byte [] buf, boolean bBigEnding) {
           if (buf == null ) {
               throw new IllegalArgumentException( "byte array is null!" );
           }
           
           if (buf.length > 4 ) {
               throw new IllegalArgumentException( "byte array size > 4 !" );
           }
           
           int r = 0 ;
           if (bBigEnding) {
               for ( int i = 0 ; i < buf.length; i++) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x000000ff );
               }
           } else {
               for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x000000ff );
               }
           }
           
           return r;
      }
     
      public long getLong( byte [] buf, boolean bBigEnding) {
           if (buf == null ) {
               throw new IllegalArgumentException( "byte array is null!" );
           }
           
           if (buf.length > 8 ) {
               throw new IllegalArgumentException( "byte array size > 8 !" );
           }
           
           long r = 0 ;
           if (bBigEnding) {
               for ( int i = 0 ; i < buf.length; i++) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x00000000000000ff );
               }
           } else {
               for ( int i = buf.length - 1 ; i >= 0 ; i--) {
                   r <<= 8 ;
                   r |= (buf[i] & 0x00000000000000ff );
               }
           }
           
           return r;
      }
     
      /*----------------------------------------------------------*/
      /* 对转换进行一个简单的封装 */
      /*----------------------------------------------------------*/
      public byte [] getBytes( int i) {
          return getBytes(i, this .testCPU());
      }
     
      public byte [] getBytes( short s) {
          return getBytes(s, this .testCPU());
      }
     
      public byte [] getBytes( long l) {
          return getBytes(l, this .testCPU());
      }
     
      public int getInt( byte [] buf) {
          return getInt(buf, this .testCPU());
      }
     
      public short getShort( byte [] buf) {
          return getShort(buf, this .testCPU());
      }
     
      public long getLong( byte [] buf) {
          return getLong(buf, this .testCPU());
      }
     
      /****************************************/
      public short [] Bytes2Shorts( byte [] buf) {
          byte bLength = 2 ;
          short [] s = new short [buf.length / bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = new byte [bLength];
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  temp[jLoop] = buf[iLoop * bLength + jLoop];
              }
              
              s[iLoop] = getShort(temp);
          }
          
          return s;
      }
     
      public byte [] Shorts2Bytes( short [] s) {
          byte bLength = 2 ;
          byte [] buf = new byte [s.length * bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = getBytes(s[iLoop]);
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  buf[iLoop * bLength + jLoop] = temp[jLoop];
              }
          }
          
          return buf;
      }
     
      /****************************************/
      public int [] Bytes2Ints( byte [] buf) {
          byte bLength = 4 ;
          int [] s = new int [buf.length / bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = new byte [bLength];
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  temp[jLoop] = buf[iLoop * bLength + jLoop];
              }
              
              s[iLoop] = getInt(temp);
              
              System.out.println( "2out->" +s[iLoop]);
          }
          
          return s;
      }
     
      public byte [] Ints2Bytes( int [] s) {
          byte bLength = 4 ;
          byte [] buf = new byte [s.length * bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = getBytes(s[iLoop]);
              
              System.out.println( "1out->" +s[iLoop]);
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  buf[iLoop * bLength + jLoop] = temp[jLoop];
              }
          }
          
          return buf;
      }
     
      /****************************************/
      public long [] Bytes2Longs( byte [] buf) {
          byte bLength = 8 ;
          long [] s = new long [buf.length / bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = new byte [bLength];
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  temp[jLoop] = buf[iLoop * bLength + jLoop];
              }
              
              s[iLoop] = getLong(temp);
          }
          
          return s;
      }
     
      public byte [] Longs2Bytes( long [] s) {
          byte bLength = 8 ;
          byte [] buf = new byte [s.length * bLength];
          
          for ( int iLoop = 0 ; iLoop < s.length; iLoop++) {
              byte [] temp = getBytes(s[iLoop]);
              
              for ( int jLoop = 0 ; jLoop < bLength; jLoop++) {
                  buf[iLoop * bLength + jLoop] = temp[jLoop];
              }
          }
          
          return buf;
      }
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值