日期:2014-05-20  浏览次数:20699 次

从byte数组中读取的16进制转化为2进制
我接收到一个byte数组,假设:byte[] aa={(byte)0xfe,0x20};byte数组中的数是十六进制的,现在我想知道每个十六进制数的各个位上是1还是0,就像oxfe是11111110,我想读出来每个位是1还是0,然后根据这个位是0还是1进行判断(1是打开,0是没打开),0xfe是11111110,我要读出来第7位是1,第6位是1,第5位是1,第4位是1,第3位是1,第2位是1,第1位是1,第0位是0.这个程序应该怎么写?谢谢指导

------解决方案--------------------
Integer.toBinaryString(0xfe);
------解决方案--------------------
首先转成数值,如:
 int a = aa[0]*256+aa[1];


然后用伪运算来判断,比如:
 if ( (a & 2) > 0 ) //判断第二位是否有值

也可以转成二进制字符串:
 Integer.toBinaryString(a)
然后再按字符串位置处理。
------解决方案--------------------
其实用位运算速度最快,也不算难写,比如你需要判断第 n 位是否有值,那么就是:

if ((dns & (1<<(n-1))) System.out.println("第"+n+"位是1");

其中“<<”是移位运算,可以理解为乘2运算。