看不懂呢。。实际开发中真的会用到这个吗?
如果需要转二进制的话,先转成String再用String的getBytes方法不就好了。。
如果需要转二进制的话,先转成String再用String的getBytes方法不就好了。。
2016-04-11
实际开发中用到的不多,但是要处理乱码的时候要用到,还有就是想成为高手,必须懂。
int转换成2进制字节型数组说白了就是将一个整数变成2进制表示,从右到左按照每八位划分开一个字节,共四个字节,也就是一个索引位4的数组。例如:00000000 00000000 00000011 00110011表示成十进制就是819,这里我解释一下,int在java中是4字节存储,4个字节恰好是32(4*8=32)位、每个字节是8位,字节是计算机中存储的一个单位,用8位2进制数表示。
将一个整数转化成2进制字符串可以用 String binaryStr = Integer.toBinaryString(8143);
整数转换成2进制字节数组:例如:00000000 00000000 00000011 00110011表示成十进制就是819
需要把00110011单独作为一个字节 就是51 具体算法是:51=0*2^7+0*2^6+1*2^5+1*2^4+0*2^3+0*2^2+1*2^1+1*2^0
以此类推:
00000011 单独作为一个字节 就是3
00000000单独作为一个字节 就是0
00000000单独作为一个字节 就是0
所以819变成字节数组是[51,3,0,0]
老师算法解释:arr[0] =(byte)((int)(id >> 0*8 & 0xff));
首先id右移n*8位(n表示第几个字节),然后再&0xff,作用是让高位为零,只保留最后八个字节,然后将字节强制类型转换为int型,最后在强制类型转换为byte型,byte字节,占用8个存储位,oxff 十六进制数,代表1111 1111。
操作过程:819 =00000000 00000000 00000011 00110011
首先:右移0*8位 结果为不变,还是00000000 00000000 00000011 00110011
然后:00000000 00000000 00000011 00110011&0xff = 00000000 00000000 00000000 00110011
最后:00000000 00000000 00000011 00110011转换为int为51
在后:51转换为byte为51
这里只展示了第一个,其他以此类推。只能这样解释了吧!!!
举报