Convert the bytes of byte array to bits and store in Integer array

馋奶兔 提交于 2019-12-11 19:34:01

问题


I have bytes in a byte array. I need to store the bit value of each byte in an integer array .

For example ,

the byte array is

byte HexToBin[] = {(byte)0x9A, (byte)0xFF,(byte) 0x05,(byte) 0x16};

then the integer array should have

a = [10011010111111110000010100010110]

I have tried the following code, where i was able to print the binary value of each byte (s2) but i couldnot store in integer array allBits.

byte hexToBin[] = {(byte)0x9A, (byte)0xFF,(byte) 0x05,(byte) 0x16};
int[] allBits = new int[32];
int a =0;

for (int i =0; i < hexToBin.length ; i++)
{
  byte eachByte = hexToBin[i];
  String s2 = String.format("%8s", Integer.toBinaryString((eachByte)& 0xFF)).replace(' ', '0');
  System.out.println(s2);
  char [] totalCharArr = s2.toCharArray();
  for (int k=0; k <8; k++)
  {
      allBits[k+a]= totalCharArr[k];
  }
  a= a+8;
}

for (int b=0; b<32;b++)
{
  System.out.print(allBits[b]);
}

The output of above code is

10011010
11111111
00000101
00010110
4948484949484948494949494949494948484848484948494848484948494948

The integer array does not have the binary value.

////////////////////////////////////////////////////////////////////////////////////////////////////

Thank you for the help

The Corrected code is

byte hexToBin[] = {(byte)0x9A, (byte)0xBF,(byte) 0x05,(byte) 0x16};
int[] allBits = new int[32]; // no of bits is determined by the license code

 for (int n =0; n<hexToBin.length; n++)
  {
    //Use ints to avoid any possible confusion due to signed byte values
    int sourceByte = 0xFF &(int)hexToBin[n];//convert byte to unsigned int
    int mask = 0x80;
    for (int i=0; i<8; i++)
    {
      int maskResult = sourceByte & mask;  // Extract the single bit
      if (maskResult>0) {
           allBits[8*n + i] = 1;
      }
      else {
           allBits[8*n + i] = 0;  // Unnecessary since array is initiated to zero but good documentation
      }
      mask = mask >> 1;
    }
  }


for (int k= 0; k<32; k++)
{
  System.out.print(allBits[k]);
}

回答1:


Assumed to be inside a loop of n = 0 to 3

// Use ints to avoid any possible confusion due to signed byte values
int sourceByte = 0xFF & (int)(hexToBin[n]);  // Convert byte to unsigned int
int mask = 0x80;
for (int i = 0; i < 8; i++) {
    int maskResult = sourceByte & mask;  // Extract the single bit
    if (maskResult != 0) {
         allBits[8*n + i] = 1;
    }
    else {
         allBits[8*n + 1] = 0;  // Unnecessary since array is inited to zero but good documention
    }
    mask = mask >> 1;
}



回答2:


Try System.out.print((char)allBits[b]); or try declaring allBits as char[], not int[].



来源:https://stackoverflow.com/questions/21127514/convert-the-bytes-of-byte-array-to-bits-and-store-in-integer-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!