Я ищу вспомогательный класс, который может изменять определенные биты в массиве байтов с помощью API, подобного приведенному ниже:
void Set(int startPos, int lengthInBits, int value) {
// Set the bits starting at startPos to the binary representation of value
// Error if the binary representation of value is too long (ie. exceeds lengthInBits)
}
Цель состоит в том, чтобы иметь возможность помещать определенные значения произвольной длины в массив байтов - некоторые значения будут иметь длину меньше байта, другие больше, а некоторые будут «растягивать» байты.
Я просмотрел ByteBuffer, но это кажется слишком высокоуровневым, работает только с помещением целых байтов и преобразованием целых и коротких чисел в несколько байтов, а не позволяет вам выбрать их максимальное количество бит.
Я также просмотрел BitSet, но на этот раз он кажется слишком низкоуровневым, так как работает только на уровне одного бита (хотя я потенциально мог бы использовать его в качестве отправной точки для создания чего-либо с помощью API, описанного выше).
Также есть старый несколько похожий вопрос о переполнении стека, в основном относящийся к использованию битов со знаком/без знака, но изображенная структура данных — это то, что я пытаюсь построить (сообщение для отправки внешнему клиенту), и я Я хотел бы скрыть как можно больше сложности со сдвигом битов.