java byte数组转char数组,字符串转为byte数组

java byte数组转char数组,字符串转为byte数组,Java 字节数组类型(byte[])与int类型互转方法

下面小编就给大家带来一个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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: