Как преобразовать между байтовыми и битовыми массивами с Java? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий код, пытающийся преобразовать между байтовыми и битовыми массивами, почему-то он не преобразует правильно, что не так и как это исправить?

  String getBitsFromBytes(byte[] Byte_Array)                // 129
  {
    String Bits="";

    for (int i=0;i<Byte_Array.length;i++) Bits+=String.format("%8s",Integer.toBinaryString(Byte_Array[i] & 0xFF)).replace(' ','0');
    System.out.println(Bits);                               // 10000001
    return Bits;
  }

  byte[] getBytesFromBits(int[] bits)
  {
    byte[] results=new byte[(bits.length+7)/8];
    int byteValue=0;
    int index;
    for (index=0;index<bits.length;index++)
    {
      byteValue=(byteValue<<1)|bits[index];
      if (index%8==7) results[index/8]=(byte)byteValue;
    }

    if (index%8!=0) results[index/8]=(byte)((byte)byteValue<<(8-(index%8)));
    System.out.println(Arrays.toString(results));

    return results;
  }

...

String bit_string=getBitsFromBytes("ab".getBytes());                // 0110000101100010  :  01100001  +  01100010   -->   ab

int[] bits=new int[bit_string.length()];
for (int i=0;i<bits.length;i++) bits[i]=Integer.parseInt(bit_string.substring(i,i+1));
getBytesFromBits(bits);

Когда я запустил его, я получил следующее:

0110000101100010
[97, 98]

Я ожидал этого:

0110000101100010
[a, b]

1 Ответ

0 голосов
/ 28 февраля 2019

Вам необходимо преобразовать из byte в char, если вы планируете отображать числовые значения в качестве соответствующих им символов ASCII:

char[] chars = new char[results.length];
for (int i = 0; i < results.length; i++) {
    chars[i] = (char) results[i];
}
System.out.println(Arrays.toString(chars));

Для преобразования из byte[] в String следует использоватьnew String(byte[]) конструктор и укажите правильную кодировку.Arrays.toString() существует только для печати последовательности элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...