Я хочу прочитать двоичный файл байта в то время, а затем сохранить бит этого байта в целочисленный массив. И аналогичным образом я хочу написать целочисленный массив из 1s и 0s (8 из них) в двоичный файл в виде байтов?Включить байт в массив бит? C
ответ
Если у вас есть массив байтов:
unsigned char bytes[10];
И хотите, чтобы изменить его в массив битов:
unsigned char bits[80];
И если у вас есть 8 бит на байт, попробуйте это:
int i;
for (i=0; i<sizeof(bytes)*8; i++) {
bits[i] = ((1 << (i % 8)) & (bytes[i/8])) >> (i % 8);
}
В этом цикле i
проходит через общее количество бит. Байт, в котором находится данный бит, равен i/8
, который как целое деление округляется вниз. Положение бит в байте составляет i%8
.
Сначала мы создаем маску для нужного бита:
1 << (i % 8)
Затем желаемый байт:
bytes[i/8]
Затем мы выполняем логическое И, чтобы очистить все биты, кроме того, мы хотим.
(1 << (i % 8)) & (bytes[i/8])
Затем мы сдвигаем результат в соответствии с положением бит, чтобы поместить желаемый бит в наименьший значащий бит. Это дает нам значение 1 или 0.
Обратите внимание также, что указанные массивы: unsigned
. Это необходимо для правильной работы бит-сдвига.
Для переключения:
int i;
memset(bytes, 0, sizeof(bytes));
for (i=0; i<sizeof(bytes)*8; i++) {
bytes[i/8] |= bits[i] << (i % 8);
}
Мы начинаем убирая массив байтов, так как мы будем настройки каждого байта один бит за один раз.
Тогда мы возьмем немного в вопросе:
bits[i]
сдвигает его в его положение:
bits[i] << (i % 8)
Затем с помощью логического ИЛИ установить соответствующие байты;
- 1. Байт в массив «Бит»
- 2. байт-массив как бит-поле в C#?
- 3. Преобразование байт-массива в бит-массив?
- 4. Вставьте один бит в байт-массив
- 5. Swift массив бит в массив байт (Uint8 массив)
- 6. Бит-массив в C++
- 7. Бит вектор построить на байт-массив - понимание бит манипуляции
- 8. C# смещаться массив байт
- 9. C бит поле/массив
- 10. Байт-массив в объекте-c
- 11. C# Преобразование в байт-массив
- 12. C 40 бит байт подкачки (обратный порядок байт)
- 13. Как включить байт [] в sbyte * в C#?
- 14. Байт-массив больше 255
- 15. байт параметра массив в Visual C++
- 16. Сколько бит составляет байт?
- 17. HMACSHA256 выходных байт/бит
- 18. Чтение бит внутри 2 байт
- 19. Включить байт
- 20. Как установить бит в байт?
- 21. Ключ 128 бит, возвращаемый массив 16 бит
- 22. байт [8] бит [64] разбор
- 23. C: Вычисление серии бит натянутой на несколько байт
- 24. Байт-массив для изображения C#
- 25. Начальный бит против стартового байт
- 26. C бит-массив символов char
- 27. C массив 64 бит приращения
- 28. Получить массив байт байт Marshal
- 29. Как получить байт * для бит в BitArray?
- 30. Целое число в байт-массив в C#
I/O в основном не работает по частям. Насколько я знаю, вы можете читать байты по байтам с функцией чтения и размером буфера 1. – chris01
Вы можете использовать битовую маску 1 и обходить по вашему входу, но на самом деле это не совсем экономично, чтобы превратить один бит в то, что эффективно 32 бит. Вы можете попробовать массив символов для хранения групп по 8 бит и использовать битхиттинг и маски для доступа к отдельным битам. – synchronizer
Слышали ли вы о смещении бит и побитовых операциях? –