Разделить байт в списке из n бит

У меня есть байт, и я должен разделить его на блоки n биты и поместить эти последовательности в список.

Примеры:

если n=2:

byte b = {171}_10 = {1010 1011}_2
 --> list = {10, 10, 10, 11}

если n=2:

byte b = {108}_10 = {0110 1100}_2
 --> list = {01, 10, 11, 00}

если n=3:

byte b = {171}_10 = {1010 1011}_2
 --> list = {101, 010} -> I removed the last 2 bits 

если n=3:

byte b = {108}_10 = {0110 1100}_2
 --> list = {011, 011}  -> I removed the last 2 bits 

Как я могу это сделать?

2 ответа

Вы можете сделать что-то вроде этого:

int len=2;
int number=1212;
char[] chars = Integer.toString(number, 2).toCharArray();
String[] strs= new String[(chars.length+len-1)/len];
for(int i=0,j=0;i<chars.length;i+=len,j++)
{
   strs[j]=new String(Arrays.copyOfRange(chars,i,i+len));
}

System.out.println(Arrays.toString(strs))

Переменнаяlen указывает длину блоков (ваш n). Установите желаемое число в числовую переменную.

Вот небольшой пример того, как это можно легко сделать.

public static void main(String[] args) {
    Integer sizeOfChunks = 2;
    Integer convertThisToBytes = 1234;
    List<String> sequenceOfBitChunks = new ArrayList<String>();
    String binaryRepresentation = Integer.toBinaryString(convertThisToBytes);

    System.out.println(binaryRepresentation);

    for(int i = 0; i + sizeOfChunks <= binaryRepresentation.length(); i = i + sizeOfChunks){
        sequenceOfBitChunks.add(binaryRepresentation.substring(i, i + sizeOfChunks));
    }

    System.out.println(Arrays.toString(sequenceOfBitChunks.toArray()));
}

Выход:

10011010010

[10, 01, 10, 10, 01]

если sizeOfChunks = 3 выход становится

10011010010

[100, 110, 100]

Другие вопросы по тегам