整数转换成字节型数组
描述:
整数(int,long,大整数)转换成字节型数组(byte[])
方法一
利用java.math.BigInteger的toByteArray()方法,将数值转换成字节型数组byte[]。
主要代码:
/**
* Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
* All rights reserved.
* Author: Jarg Yee <yeshaoting@gmail.com>
* 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 <yeshaoting@gmail.com>
* 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 <yeshaoting@gmail.com>
* 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 秒) - 正常终止