java实现int整型转换成byte[]字节数组

java实现int整型转换成byte[]字节数组
1.首先我们要了解计算机存储都是以“补码”形式存储的,这里简单说一下原码,反码,补码

原码:将一个整数,转换成二进制,就是其原码。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
补码:正数的补码就是其原码;负数的反码+1就是补码。

然后在java中int类型占4个byte(字节),1个byte(字节)占8个bit(位),也就是说int类型占了32个bit,在Java中byte是有符号的范围是-128~127

2.整数int = 1000 为例

二进制:
源码:00000000 00000000 00000011 11101000‬
反码:00000000 00000000 00000011 11101000‬
补码:00000000 00000000 00000011 11101000‬

补码不右移动
00000000 00000000 00000011 11101000‬  最低位的字节转换成十进制为-24
补码右移动8位
00000000 00000000 00000000 00000011  最低位的字节转换成十进制为3
补码右移动16位	
00000000 00000000 00000000 00000000  最低位的字节转换成十进制为0
补码右移动32位
00000000 00000000 00000000 00000000  最低位的字节转换成十进制为0

3.转换成byte[]字节数组两种转换为:
3.1从高位(左端开始)取byte[] = [0,0,3,-24]
3.2从低位(右端开始)取byte[] = [-24,3,0,0]

package test;

import java.util.Arrays;

public class ByteUtil {
	  /**
	   * 方法功能:int整型转换成字节数组byte[],注意该算法是从高位(左端)往低位(右端)取二进制,
	   *        len为字节个数,int整型占4个字节为32位。  
	   * @param int n
	   * @param int len
	   * @return byte[]
	   * */
	  public static byte[] int2BytesA(int n, int len) throws IllegalArgumentException
	  {
	    if (len <= 0) {
	      throw new IllegalArgumentException("Illegal of length");
	    }
	    byte[] b = new byte[len];
	    for (int i = len; i > 0; i--) {
	      b[(i - 1)] = ((byte)(n >> 8 * (len - i) & 0xFF));
	    }
	    return b;
	  }
	  /**
	   * 方法功能:int整型转换成字节数组byte[],注意该算法是从低位(右端)往高位(左端)取二进制。
	   * 
	   * */
	  public static void int2BytesB(){
			int i = 1000;
			byte[] arr = new byte[4] ;
//			arr[0] = (byte)i ;         //通过debug可以看到arr[0] = -24,也就是11101000‬
//			arr[1] = (byte)(i >> 8) ;  //通过debug可以看到arr[1] = 3,也就是00000011 
//			arr[2] = (byte)(i >> 16) ; //通过debug可以看到arr[2] = 0, 也就是00000000
//			arr[3] = (byte)(i >> 24) ; //通过debug可以看到arr[3] = 0,  也就是00000000
			 
			for (int j = 0; j < 4; j++) {
			      arr[j] = ((byte)(i >> 8 * (j) & 0xFF));
			    }
			System.out.println("从低位(右端)取字节数组为:"+Arrays.toString(arr));//输出结果:从低位(右端)取字节数组为:[-24, 3, 0, 0]
		}

	  public static void main(String[] args) {
		int n = 1000;
		int len = 4;//整型为4个字节。
		byte[] b =  new byte[len];
		b = int2BytesA(n, len);
		System.out.println("从高位(左端)取字节数组为:"+Arrays.toString(b));//输出结果:从高位(左端)取字节数组为:[0, 0, 3, -24]
		
		int2BytesB();  
	}
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值