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

Удалить из каждого байта строки первый (старший) бит. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ взлом паролей http://www.cyberforum.ru/cpp-beginners/thread376937.html
есть ли какие нибудь простые алгоритмы для взлома паролей к rаr архиву? Желательно чтоб были по с++
C++ Стрельба в координаты мыши Как оказалось, отсутствие математических основ в голове, это очень большая проблема, ибо застрял на простой задаче. Собственно, производится выстрел из корабля, снаряд должен лететь по направлению... http://www.cyberforum.ru/cpp-beginners/thread376912.html
Файловый поток вместо одного слова считывает два, почему? C++
Друзья! Вот код #include <stdio.h> #include <iostream> #include <fstream> using namespace std; int main () { ifstream ifs ("z.txt"); string temp;
C++ помогите переделать программу (по проще)
программа которое определяет максимальное число из введенной последовательности и положительных чисел (длина и последовательность не ограничен) программа должна проверять правильность исходных...
C++ Метод Гаусса (блок-схема) http://www.cyberforum.ru/cpp-beginners/thread376897.html
Нужна помощь в вербальном описании блок-схемы,помогите,пожалуйста
C++ нужно написать прогу(исходника нет..) Долго сидел думал но так и не додумался как написать... первые месяцы только изучаю си и с++ вот собственно сама задача.. Написать программу вычисляющую сумму покупки К тетрадей и Н РУЧЕК С... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,194
Записей в блоге: 27
09.11.2011, 21:25
Когда голова плохо соображает, как такое сделать программно (хотя понимает, что сделать на бумажке), зачастую хорошим выходом будут череж...ые решения. Они неэффективные, некрасивые, зато понятные. Здесь я пользуюсь двумя разными понятиями "байт" и "char" (что есть тоже байт), поскольку они описывают немного разные сущности.

Берём исходный char и распиливаем его на отдельные биты и в результате создаём массив из 8 байт, в каждом элементе которого записан 0 или 1, в соответствии с нужным битом. Работаем кусками по 8 char'ов. Т.е. 8 char'ов превращаем в массив из 64 байтов. Далее из этого массива формируем массив из 56 байт, в котором выкинуты каждый 8-й байт (что соотвествует каждому старшему биту из каждого исходного char'а). Далее эти 56 байт превращаем в 7 char'ов. Таким образом из исходных 8 char'ов мы получили результирующие 7 char'ов, которые отображают последовательность с выкинутыми битами.

Если количество char'ов в исходном коде не кратно 8, то их искусственно дорастить нулями до кратного 8 значения, а потом посчитать, сколько выкинуть из хвоста результирующей последовательности

Поскольку в программе ты будешь оперировать одним и тем же типом для того, что я называл "char" и "байт", то вместо "байт" лучше использовать int. Отожрётся немного побольше памяти, но зато не запутаешься, который char что обозначает
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru