我接收到一个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.这个程序应该怎么写?谢谢指导

解决方案 »

  1.   

    首先转成数值,如:
     int a = aa[0]*256+aa[1];
    然后用伪运算来判断,比如:
     if ( (a & 2) > 0 ) //判断第二位是否有值也可以转成二进制字符串:
     Integer.toBinaryString(a)
    然后再按字符串位置处理。
      

  2.   

    Integer.toBinaryString(0xfe);
    这样写是没错,但是如果Integer.toBinaryString(aa[0]);解析出来的就不是我要的数了只要aa[0]大于0x7f,直接用Integer.toBinaryString(aa[0]);解析出来的就不对了
      

  3.   

    我打算这样写:
    int dns;
    if(aa[0]<0))
    {
        dns = 256 +aa[0];   
    }
    else
    {
        dns =aa[0];
    }
    String str4=Integer.toBinaryString(dns);
    就是还需要判断,str4前面可能需要补0(凑够8位)
      

  4.   

    其实用位运算速度最快,也不算难写,比如你需要判断第 n 位是否有值,那么就是:if ((dns & (1<<(n-1))) System.out.println("第"+n+"位是1");其中“<<”是移位运算,可以理解为乘2运算。