package com.cc8w.test; public class TestInt2char { public static void main(String[] args) { int a=129; // 第一组 第二组 第三组 第四组 //2的二进制表示完整为 "[00000000][00000000][00000000][00000010]"[]括号实际没有,为了看起来清楚加的 byte[] b=new byte[4]; //>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1; //向右移位运算,移动24位后,高8位,被移动到低8位上,二、三、四组都会被丢弃 b[0]=(byte) (a>>24); //向右移动16位,高16位到低16位地方,第三、四组会被舍弃,至于&0xff这里不容易看出来,b[3]那一行能看出来 b[1]=(byte) ((a>>16)&0xff); //移动8位第四组会被丢弃,结果还是0 b[2]=(byte) ((a>>8)&0xff); //不移动直接进行与(&)运算,0xff的二进制是第四位为8个1 其他是0的数,作用就是排除不想要的位 //这里来个例子 [00000000][00000110][00000100][00000010]假如有这么个二进制的数字 //如果你想取到[00000100]字节的值 , 先对其向右移动8位变为 //[00000000][00000000][00000110][00000100] //然后和0xff与运算,0xff二进制[00000000][00000000][00000000][11111111] //与运算后的结果就为[00000000][00000000][00000000][00000100] //这样需要的字节就拿到了 //0xff十六进制是0x000000ff的简写(十六进制的2字符 可以代表一个字节[8位],上面把00 00 00 ff写成ff)
//半个字节(即4位)可以表示十六进制的一个字符(0~f),即:十六进制的字符占用4位
b[3]=(byte) (a&0xff); for (byte c : b) { System.out.print(Integer.toBinaryString(c&0xff)+" "); } System.out.println(); //把字节转回Int和上面颠倒下,就不多说了。 int i=0; i+=((b[0]&0xff)<<24); i+=((b[1]&0xff)<<16); i+=((b[2]&0xff)<<8); i+=((b[3]&0xff)); System.out.println(i); } }
下面封装成方法
一、Int2Byte
byte[] bytes = new byte[4]; for (int i = 0; i < 4; i++) { bytes[i] = (byte)(integer >>> (i * 8)); }
二、 Byte2Int
int i= (rno[0]<<24)&0xff000000| (rno[1]<<16)&0x00ff0000| (rno[2]<< 8)&0x0000ff00| (rno[3]<< 0)&0x000000ff;
或
int x = ((b[0] & 0xFF) << 24) | ((b[1] & 0xFF) << 16) | ((b[2] & 0xFF) << 8) | ((b[3] & 0xFF) << 0);
>>> : 无符号右移,忽略符号位,空位都以0补齐
https://www.cnblogs.com/fps2tao/p/13361785.html
转 : https://www.iteye.com/blog/name327-1742945
https://www.cnblogs.com/helloz/p/10161424.html