整数转换成字节型数组
描述:
整数(int,long,大整数)转换成字节型数组(byte[])
方法一
利用java.math.BigInteger的toByteArray()方法,将数值转换成字节型数组byte[]。
主要代码:
/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg Yee <[email protected]> * http://jarg.iteye.com/ */ import java.math.BigInteger; /* * 整数(int,long,大整数)转换成字节型数组(byte[]) */ public class IntegerToByteArrayUtil { /** for debugging. */ public static void main(String[] args) { BigInteger bigInteger = null; // bigIntegerToByteArray String bigNumber = "" + Long.MAX_VALUE/50 + Long.MAX_VALUE/50;// 一个测试大整型数 bigInteger = new BigInteger(bigNumber.toString()); byteArrayToString(bigInteger.toByteArray()); // 转换 // longToByteArray Long longNumber = Long.MAX_VALUE/50; // 一个测试长整型数 bigInteger = new BigInteger(longNumber.toString()); byteArrayToString(bigInteger.toByteArray()); // 转换 // intToByteArray Integer intNumber = Integer.MAX_VALUE/50; // 一个测试整型数 bigInteger = new BigInteger(intNumber.toString()); byteArrayToString(bigInteger.toByteArray()); // 转换 } /** 字节数组字符串显示 */ private static void byteArrayToString(byte[] byteArray) { System.out.print("byte[" + byteArray.length + "] = \t"); for(byte byteValue : byteArray) { System.out.print(byteValue + "\t"); } System.out.println(); System.out.println("*******************************"); } }
---------- 运行Java ----------
byte[15] = 35 -122 -14 111 -63 0 0 0 86 -19 1 -7 -78 -113 92
*******************************
byte[8] = 2 -113 92 40 -11 -62 -113 92
*******************************
byte[4] = 2 -113 92 40
*******************************
输出完成 (耗时 0 秒) - 正常终止
方法二
利用移位和与0xFF按位与操作,每8位地获取数据存入字节数组,将数值转换成字节型数组byte[]。
主要代码:
/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg Yee <[email protected]> * http://jarg.iteye.com/ */ /* * 整数(int,long)转换成字节型数组(byte[]) */ public class IntegerToByteArrayUtil2 { private static final byte byteLength = 8; // 字节位长 /** for debugging. */ public static void main(String[] args) { Long longNumber = Long.MAX_VALUE/50; // 一个测试整型数 Integer intNumber = Integer.MAX_VALUE/50; // 一个测试整型数 byteArrayToString(numberToByteArray(longNumber)); byteArrayToString(numberToByteArray(intNumber)); } /** 数值转换成字节型数组 */ private static byte[] numberToByteArray(Object number) { if(number instanceof Long) { return longToByteArray((Long)number, 8); } else if(number instanceof Integer) { return intToByteArray((Integer)number, 4); } else { return null; } } /* 整型32bit转换成字节型8bit数组 @param number 待求数值 @param length 数值所占字节数 */ private static byte[] intToByteArray(int number, int length) { byte[] byteArray = new byte[length]; int shiftNum = 0; // 移位数 for(int i=0; i<length; i++) { shiftNum = (length-i-1)*byteLength; byteArray[i] = (byte)((number >> shiftNum) & 0xFF); } return byteArray; } /* 整型64bit转换成字节型8bit数组 @param number 待求数值 @param length 数值所占字节数 */ private static byte[] longToByteArray(long number, int length) { byte[] byteArray = new byte[length]; int shiftNum = 0; // 移位数 for(int i=0; i<length; i++) { shiftNum = (length-i-1)*byteLength; byteArray[i] = (byte)((number >> shiftNum) & 0xFF); } return byteArray; } /** 字节数组字符串显示 */ private static void byteArrayToString(byte[] byteArray) { System.out.print("byte[] = \t"); for(byte byteValue : byteArray) { System.out.print(byteValue + "\t"); } System.out.println(); System.out.println("*******************************"); } }
运行结果:
---------- 运行Java ----------
byte[] = 2 -113 92 40 -11 -62 -113 92
*******************************
byte[] = 2 -113 92 40
*******************************
输出完成 (耗时 0 秒) - 正常终止
方法三
利用ByteArrayOutput的toByteArray()方法。先将整数写入到字节流中,然后通过该类的toByteArray()方法,将流中的整数转换成字节型数组。
主要代码:
/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg Yee <[email protected]> * http://jarg.iteye.com/ */ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; /* * 整数(int,long)转换成字节型数组(byte[]) */ public class IntegerToByteArrayUtil3 { /** for debugging. */ public static void main(String[] args) throws Exception { Long longNumber = Long.MAX_VALUE/50; // 一个测试整型数 Integer intNumber = Integer.MAX_VALUE/50; // 一个测试整型数 byteArrayToString(numberToByteArray(longNumber)); byteArrayToString(numberToByteArray(intNumber)); } /** 数值转换成字节型数组 */ private static byte[] numberToByteArray(Object number) throws Exception { if(number instanceof Long) { return longToByteArray((Long)number); } else if(number instanceof Integer) { return intToByteArray((Integer)number); } else { return null; } } /** 整型32bit转换成字节型8bit数组 */ private static byte[] intToByteArray(int number) throws Exception { ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutput); out.writeInt(number); // 写入到字节流 byte[] byteArray = byteOutput.toByteArray(); // 转换 byteOutput.close(); out.close(); return byteArray; } /** 长整型64bit转换成字节型8bit数组 */ private static byte[] longToByteArray(long number) throws Exception { ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutput); out.writeLong(number); // 写入到字节流 byte[] byteArray = byteOutput.toByteArray(); // 转换 byteOutput.close(); out.close(); return byteArray; } /** 字节数组字符串显示 */ private static void byteArrayToString(byte[] byteArray) { System.out.print("byte[" + byteArray.length + "] = \t"); for(byte byteValue : byteArray) { System.out.print(byteValue + "\t"); } System.out.println(); System.out.println("*******************************"); } }
运行结果:
---------- 运行Java ----------
byte[8] = 2 -113 92 40 -11 -62 -113 92
*******************************
byte[4] = 2 -113 92 40
*******************************
输出完成 (耗时 0 秒) - 正常终止