android byte[] 和short[]轉(zhuǎn)換的方法代碼
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;
}
/*----------------------------------------------------------*/
/* 對轉(zhuǎn)換進行一個簡單的封裝 */
/*----------------------------------------------------------*/
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[] 轉(zhuǎn)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]);
}
}
相關(guān)文章
RecyclerView實現(xiàn)仿支付寶應(yīng)用管理
這篇文章主要為大家詳細介紹了RecyclerView實現(xiàn)仿支付寶應(yīng)用管理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Android?WindowManger實現(xiàn)桌面懸浮窗功能
這篇文章主要介紹了Android?WindowManger實現(xiàn)桌面懸浮窗功能,他們基本都是在Activity之上顯示的,如果想實現(xiàn)在桌面顯示的懸浮窗效果,需要用到WindowManager來實現(xiàn)了,需要的朋友可以參考下2023-04-04Android Studio打包H5網(wǎng)址頁面,封裝成APK
大家好,本篇文章主要講的是Android Studio打包H5網(wǎng)址頁面,封裝成APK,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12深入解析Android系統(tǒng)中應(yīng)用程序前后臺切換的實現(xiàn)要點
這篇文章主要介紹了Android系統(tǒng)中應(yīng)用程序前后臺切換的實現(xiàn)要點,除了切換操作的效果之外還重點講解了判斷程序運行于前臺還是后臺的方法,需要的朋友可以參考下2016-04-04關(guān)于ADB的Android Debug Bridge(安卓調(diào)試橋)那些事
這篇文章主要介紹了關(guān)于ADB的Android Debug Bridge(安卓調(diào)試橋)那些事,需要的朋友可以參考下2019-10-10