java byte 和 int 转换

一个byte占8位,一个int占32位。

int 转byte时,需要&0xff,去掉前面的24位。因此当int是正数时,转出的byte可能是负数

byte转int时,需要&0xff,补足前面的24位。因此如果byte是负数,转成int时可能会变成整数。

package test;

public class Byte_Int_Relation {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int x = -1234;
		System.out.println(intToByte(x));
	}
	
	/**
	 * byte转int类型
	 * 如果byte是负数,则转出的int型是正数
	 * @param b
	 * @return
	 */
	public static int byteToInt(byte b){
		System.out.println("byte 是:"+b);
		int x = b & 0xff;
		System.out.println("int 是:"+x);
		return x;
	}
	/**
	 * int 类型转换为byte 类型
	 * 截取int类型的最后8位,与 0xff
	 * @param x
	 * @return
	 */
	public static byte intToByte(int x){
		System.out.println("int 是:"+x);
		System.out.println("int的二进制数据为:"+Integer.toBinaryString(x));
		byte b =(byte) (x & 0xff);
		System.out.println("截取后8位的二进制数据为:"+Integer.toBinaryString(x & 0xff));
		System.out.println("byte 是:"+b);
		return b;
	}
	/*
	 * 把整数转换为字节数组:整数是32位,8位一个字节,依次读取8位,转化为字节数组
	 * 整数与0xff,取得最后8位,生成整数,再强转为第3个byte
	 * 整数右移8位,与0xff,取得倒数第二组8位,生成整数,再强转为第2个byte
	 * 整数右移16位,与0xff,取得倒数第3组8位,生成整数,再强转为第1个byte
	 * 整数右移24位,与0xff,取得倒数第4组8位,生成整数,再强转为第0个byte
	 */
	public static byte[] intToByteArr(int x){
		System.out.println("int 是:"+x);
		byte[] arr = new byte[4];
		arr[3]= (byte)(x & 0xff);
		arr[2]= (byte)(x>>8 & 0xff);
		arr[1]= (byte)(x>>16 & 0xff);
		arr[0]= (byte)(x>>24 & 0xff);
		System.out.print("转换后的字节数组是:");
		for(byte temp : arr){
			System.out.print(temp+" ");
		}
		System.out.println("");
		return arr;
	}
	/**
	 * byte数组转换为整数
	 * 第0个byte与上0xff,生成整数,在右移24位,取得一个整数
	 * 第1个byte与上0xff,生成整数,在右移16位,取得一个整数
	 * 第2个byte与上0xff,生成整数,在右移8位,取得一个整数
	 * 第3个byte与上0xff,生成整数
	 * 把四个整数做或操作,转换为已整数
	 */
	public static int byteArrToInt(byte[] arr){
		System.out.print("需要转换的字节数组是:");
		for(byte temp : arr){
			System.out.print(temp+" ");
		}
		System.out.println("");
		int x = ((arr[0] & 0xff) << 24 )|((arr[1]& 0xff) <<16 )|((arr[2] & 0xff)<<8)|(arr[3] & 0xff);
		System.out.println("转换后的整数是:"+x);
		return x;
	}

	

}

猜你喜欢

转载自blog.csdn.net/TIANFEIFEIFEI/article/details/85620559
今日推荐