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