下面小编就给大家带来一个Java字节数组类型(byte[])和int类型的转换方法。我觉得边肖挺好的。我现在就分享给你,给你一个参考。来和边肖一起看看吧。
代码如下:
公共类公用程序{
//高位在前,低位在后
公共静态字节[] int2bytes(int num){
byte[] result=新字节[4];
result[0]=(byte)((num 24)0x ff);//注1
result[1]=(byte)((num 16)0x ff);
result[2]=(byte)((num 8)0x ff);
result[3]=(byte)((num 0)0x ff);
返回结果;
}
//高位在前,低位在后
public static int bytes 2 int(byte[]bytes){
int result=0;
if(bytes.length==4){
int a=(bytes[0]0x ff)24;//注2
int b=(bytes[1]0x ff)16;
int c=(bytes[2]0x ff)8;
int d=(bytes[3]0x ff);
结果=a | b | c | d;
}
返回结果;
}
公共静态void main(String[] args){
int a=-64;
system . out . println('-64=' integer . tobinary string(-64));
byte[]bytes=common utils . int 2 bytes(a);
for(int I=0;i4;i ){
system . out . println(bytes[I]);
}
a=CommonUtils.bytes2int(字节);
system . out . println(a);
}
}
运行结果如下:
-64=11111111111111111111111111000000
-1
-1
-1
-64
-64
说明1:
-64转换成二进制源代码为[1000000][000000][000000][0100000]
将原代码改为补码[11111111][1111111][11111111][1100000],与控制台输出结果相同。可以看出,二进制在java中是以补码的形式表示的。
在-64 24(无符号右移,高位用0填充)之后,它变成[0000000][000000][0000000][1111111]
上一步的结果是0xff后,仍然是[00000000][0000000][000000][1111111],因为0xff的值是[0000000][000000][000000][111111],
然后将结果强转换为字节类型,低位保留,高位截断为[11111111]。可以看出,上一步的0xff其实是不必要的,无论高位是多少,最终都会被截断。
因此,结果[0]是[1111111]=-1。
以此类推:
结果[1]是[1111111]=-1。
结果[2]是[1111111]=-1。
结果[3]是[1100000]=-64。
说明2:
如果byte[0]为[1111111],则先转换为int类型(在进行位移运算之前,byte type将转换为int类型,如果为正,高位用0填充,如果为负,高位用1填充),高位用1填充,成为[111111111][11111][
上一步的结果是0xff后,就变成[0000000][000000][0000000][1111111]
那么上一步24的结果(左移,低位补零)就会变成[1111111][000000][000000][000000]=a。
用同样的方法得到B,C,D
最后的a | b | c | d是:
[11111111][00000000][00000000][00000000] |
[00000000][1111111][0000000][000000]|因为0xff在16位之前,所以B的最高8位保证是0。
[00000000][0000000][1111111][0000000]|因为0xff在8位之前,所以C的最高16位保证是0。
[00000000][0000000][0000000][11000000]因为0xff,保证了D的最高24位全为0。
=[11111111][11111111][11111111][11000000]=-64
可以看出,为了保证byte转换成int时,位补不会影响a | b | c | d(设置为0)的最终结果,0xff是必要的。
短字节[]和长字节[]之间的转换类似。
PS:
1,int类型占用4个字节,而byte类型只占用1个字节。
2.原码:最高位是符号位,其余位用来表示数值。
原始代码为2: 0000010
原始代码为-2: 1000010
3、逆码:一个正数的逆码与其原码相同;负数的符号位不变,其余位逐位反转。
2: 0000010的倒数
-2: 1111101的倒数
4、补码:一个正数的补码与其原码相同;负数的补数是负数1的补数。
二进制补码:0000010
-2的补码:1111110
以上Java字节数组类型(byte[])和int类型转换方法是边肖共享的全部内容。希望能给你一个参考,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。