android byte[] 和short[]转换的方法代码

 更新时间:2014年01月15日 14:53:38   转载 作者:  
这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下

1,工具代码

复制代码 代码如下:

public class BytesTransUtil {

 private String TAG = "BytesTransUtil";
 private static BytesTransUtil instance = null;

 private BytesTransUtil() {
  // Log.i(TAG, "instance BytesTransUtil");
 }

 public static BytesTransUtil getInstance() {
  if (instance == null) {
   instance = new BytesTransUtil();
  }
  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;
 }

}

2,测试代码

复制代码 代码如下:

public class main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //简单测试了short[] 转byte[],其他类似;
  BytesTransUtil bytesTransUtil = BytesTransUtil.getInstance();
  int[] sTest = { 12345678, 87654321 };
  byte[] byteShort = bytesTransUtil.Ints2Bytes(sTest);
  int[] sTemp = bytesTransUtil.Bytes2Ints(byteShort);
  System.out.println("short[0] = " + sTemp[0] + "   short[1] = " + sTemp[1]);

 }
}

相关文章

  • 实例探究Android开发中Fragment状态的保存与恢复方法

    实例探究Android开发中Fragment状态的保存与恢复方法

    这篇文章主要介绍了实例探究Android开发中Fragment状态的保存与恢复方法,或许开发者们对Fragment的操作都比较熟悉,但onSaveInstanceState()方法并不能够很好地保存Fragment状态,需要的朋友可以参考下
    2016-04-04
  • Android实现读取NFC卡卡号示例

    Android实现读取NFC卡卡号示例

    本篇文章主要介绍了Android实现读取NFC卡卡号示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Android  SharedPreferences四种操作模式使用详解

    Android SharedPreferences四种操作模式使用详解

    这篇文章主要介绍了Android SharedPreferences四种操作模式使用详解的相关资料,这里介绍了获取Android SharedPreferences的两种方法及比较,和操作模式的介绍,需要的朋友可以参考下
    2017-07-07
  • Android实现QQ侧滑菜单效果

    Android实现QQ侧滑菜单效果

    这篇文章主要为大家详细介绍了Android实现QQ侧滑菜单效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android中 service组件详解

    Android中 service组件详解

    Service是Android的四大组件之一,以下是我结合Android Doc和网上资料的学习总结,有不准确的地方请高手指出,互相学习嘛。。。
    2016-08-08
  • Android学习之介绍Binder的简单使用

    Android学习之介绍Binder的简单使用

    BInder方面的资料虽然感觉看的比较多,但是真正用的时候才发现有很多地方模棱两棵的,所以,打算用一个实例再来巩固一下binder的使用方法。这篇文章主要介绍了Android中Binder的简单使用,文中给出详细的示例代码,需要的朋友可以参考下
    2016-12-12
  • Android应用强制更新APP的示例代码

    Android应用强制更新APP的示例代码

    本篇文章主要介绍了Android应用强制更新APP的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Android App支付系列(一):微信支付接入详细指南(附官方支付demo)

    Android App支付系列(一):微信支付接入详细指南(附官方支付de

    这篇文章主要介绍了Android App支付系列(一):微信支付接入详细指南(附官方支付demo) ,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Kotlin使用静态变量与静态方法详解

    Kotlin使用静态变量与静态方法详解

    kotlin定义静态变量、方法可以采用伴生对象companion object的方式。 下面这篇文章主要给大家介绍了关于Kotlin使用静态变量与静态方法的相关资料,需要的朋友可以参考下
    2018-12-12
  • android实现程序自动升级到安装示例分享(下载android程序安装包)

    android实现程序自动升级到安装示例分享(下载android程序安装包)

    这篇文章主要介绍了android实现下载android程序安装包自动升级的示例,大家参考使用吧
    2014-01-01

最新评论