Форум программистов, компьютерный форум CyberForum.ru

Битовое представление - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 5.00
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
30.10.2011, 19:19     Битовое представление #1
Как можно получить любой файл в виде массива бит (именно бит, не байт) чтобы произвести непосредственно над каждым битом действие, и из выходной последовательности бит получить файл (не список бит в текстовом файле, а именно файл из этих бит).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 19:19     Битовое представление
Посмотрите здесь:

C++ Создать битовое поле для хранения времени
C++ Битовое представление
C++ Битовое ИЛИ. Пердача нескольких констант в один параметр функции
Разработать битовое поле, описывающее состояния элементов прибора C++
Ввести с консоли число в 16-ричной системе счисления, преобразовать его в битовое поле за счёт использования объединения C++
C++ Битовое И
Битовое представление каждого байта C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
30.10.2011, 19:24     Битовое представление #2
Цитата Сообщение от revanatar Посмотреть сообщение
Как можно получить любой файл в виде массива бит (именно бит, не байт) чтобы произвести непосредственно над каждым битом действие, и из выходной последовательности бит получить файл (не список бит в текстовом файле, а именно файл из этих бит).
Единицей обращения кпамяти компьютера является именно байт. Поэтому вы можете считать файл в виде двоичногопредставления байтов и с ним делатьвсе,что захотите. Просто нужно открыть файл в двоичном фиде и читать его данные в символьный массив.
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
30.10.2011, 19:40  [ТС]     Битовое представление #3
т.е. я получу строку с расписанным каждым байтом по битам?
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2011, 19:42     Битовое представление #4
Цитата Сообщение от revanatar Посмотреть сообщение
т.е. я получу строку с расписанным каждым байтом по битам?
нет вы получите строку байт, разбить их на биты и записать представление бита в файл уже ваша задача
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
30.10.2011, 19:49  [ТС]     Битовое представление #5
Допустим перевел, сложил, перевел обратно, как склеить новый файл?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
30.10.2011, 20:16     Битовое представление #6
Цитата Сообщение от revanatar Посмотреть сообщение
Допустим перевел, сложил, перевел обратно, как склеить новый файл?
Что с чем склеить? Перевел обратно, получил какую-то последовательность байт, ее и пишешь в файл.
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
30.10.2011, 20:23  [ТС]     Битовое представление #7
ну не в файл надо, а файл из выходныи бит, чтобы например если я из того файла что вышел получу опять строку, сделаю обратные действия с битами и запишу в файл - получился исходный файл.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
30.10.2011, 20:33     Битовое представление #8

Не по теме:

Цитата Сообщение от revanatar Посмотреть сообщение
ну не в файл надо, а файл из выходныи бит, чтобы например если я из того файла что вышел получу опять строку, сделаю обратные действия с битами и запишу в файл - получился исходный файл
блин, несколько раз перечитал, реально понять хотел



Добавлено через 1 минуту
Еще раз:
1. Читаешь файл в бинарном виде.
2. Что-то делаешь с полученными байтами.
3. Пишешь результат обратно в файл (или куда там нужно).
4. Любуешься результатом.
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
31.10.2011, 00:57  [ТС]     Битовое представление #9
пример бы хотелось

Добавлено через 2 часа 41 минуту
Делая например так получаю в строку f такое: Rar!
Код
ifstream in("d:\\WinRAR.rar", ios::in|ios::binary);
    string f;
    in>>f;
При чем результат один и тот же с ios::in и без него. Что не так?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.10.2011, 01:07     Битовое представление #10
Цитата Сообщение от revanatar Посмотреть сообщение
При чем результат один и тот же с ios::in и без него. Что не так?
ifstream вроде по-умолчанию "входящий", нэ?
Вам же сказали, читать надо побайтово, строка то здесь при чем?
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
31.10.2011, 01:20  [ТС]     Битовое представление #11
ifstream - операции ввода из файла
Хоть бы ктото пример кинул...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.10.2011, 08:14     Битовое представление #12
пример делай на двух байтах
в файле всё равно хранятся байты

тебе нужна функция, переводящая байт в набор битов
тебе нужна функция, переводящая набор битов в байт
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 11:22     Битовое представление #13
Цитата Сообщение от revanatar Посмотреть сообщение
именно бит, не байт
Массива бит не может быть по определению, т.к. минимальная выделяемая единица оперативной памяти - байт. Но ты берёшь этот байт и при помощи масок и сдвигов работаешь с ним как с восемью битами.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.10.2011, 11:35     Битовое представление #14
Массив бит ты не получишь, но обращаться к битам можно и над каждым можно выполнять операции. Например, сброс 17-го бита:
C++
1
2
3
//Есть некое данное и зовут его d
char*p=(char *)((void *)&d);
p[2]&=0xBF;
C++
1
2
3
//Есть некий указатель на данное и зовут его d
char*p=(char *)((void *)d);
p[2]&=0xBF;
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
31.10.2011, 16:18  [ТС]     Битовое представление #15
я же не говорю что обязательно то биты в своем истинном представлении, просто массив единиц и нулей, с ним было бы в разы проще работать, единственное что непонятно как потом обратить в байты такой массив чтобы из них записать новый файл
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 16:20     Битовое представление #16
C++
1
2
3
4
5
6
7
8
int x = 1;// 1 или 0. восемь разных циферок
int byte = 0;
byte += x;
byte += x<<1;
byte += x<<2;
byte += x<<3;
...
//выводишь byte в файл
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.10.2011, 16:25     Битовое представление #17
Цитата Сообщение от revanatar Посмотреть сообщение
с ним было бы в разы проще работать
В разы сложнее. Считай:
1. Извлечь, используя обращение к биту внутри байта.
2. Обработать массив.
3. Собрать снова байты, используя обращение к биту внутри байта.
Итого, как минимум втрое сложнее.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.10.2011, 16:35     Битовое представление #18
Цитата Сообщение от revanatar Посмотреть сообщение
просто массив единиц и нулей, с ним было бы в разы проще работать
Это потому что Вы не достаточно хорошо представляете как применять битовые операции?
revanatar
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 35
31.10.2011, 17:17  [ТС]     Битовое представление #19
Так будут головоломательные циклы, так как мне надо будет каждый раз вытягивать биты из предидущей восьмерки чтобы складывать с текущими
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 17:20     Битовое представление
Еще ссылки по теме:

Функция, зеркально отображающая битовое представление числа C++
Битовое чтение файлов C++
Битовое сравнение чисел C++
Битовое представление int const C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.10.2011, 17:20     Битовое представление #20
Цитата Сообщение от revanatar Посмотреть сообщение
Так будут головоломательные циклы, так как мне надо будет каждый раз вытягивать биты из предидущей восьмерки чтобы складывать с текущими
Пара макросов избавят Вас от этой проблемы.
Yandex
Объявления
31.10.2011, 17:20     Битовое представление
Ответ Создать тему
Опции темы

Текущее время: 08:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru