整数转换成字节型数组

 

 

整数转换成字节型数组

 

描述:

整数(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 秒) - 正常终止

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值