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

Работа с битовыми операциями - C++

Восстановить пароль Регистрация
 
linuxubuntu
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 55
18.02.2012, 13:20     Работа с битовыми операциями #1
Реализовать функции шифрования и дешифрования строк. Принцип шифрования: на четыре бита слева каждого символа нало-жить 4-ёх битную маску (операция XOR), затем первый и третий би-ты слева поменять местами. После шифрования напечатать коды символов зашифрованной строки и полученную строку. Дешифровать результат и убедиться, что строка стала равна исходной.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 13:20     Работа с битовыми операциями
Посмотрите здесь:

C++ работа с битовыми операциями
Проблема с битовыми операциями C++
Работа с битовыми операторами C++
C++ Работа с Битовыми образами
Работа с битовыми операциями C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
18.02.2012, 14:11     Работа с битовыми операциями #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned char code(unsigned char symbol) {
    unsigned char mask = 208; //1101 0000
    unsigned char maskedResult = symbol ^ mask;
    
    unsigned char firstBitMask = 128; //1000 0000
    unsigned char thirdBitMask = 32;  //0010 0000
    
    unsigned char firstSet = maskedResult & firstBitMask;
    unsigned char thirdSet = maskedResult & thirdBitMask;
    
    maskedResult = maskedResult & (~firstBitMask);
    maskedResult = maskedResult & (~thirdBitMask);
    
    maskedResult = maskedResult | (thirdSet<<2);
    maskedResult = maskedResult | (firstSet>>2);
    
    return maskedResult;
}
шифрация одного входного байта. остальное сам.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.02.2012, 14:27     Работа с битовыми операциями #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;
 
int main () {
 
 string str("stroka");
 cout<< str<<endl;
 transform (str.begin(), str.end(),str.begin(),[](char i) {return i^=0XFA;}); 
 cout<< str<<endl;;
 transform (str.begin(), str.end(),str.begin(),[](char i) {return i^=0XFA;}); 
 cout<< str;
 
 getchar (); 
 return 0;
}

Добавлено через 1 минуту
Это исключительно наложение маски
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.02.2012, 14:28     Работа с битовыми операциями #4
Цитата Сообщение от kravam Посмотреть сообщение
#include <iostream>
#include <string>
#include <algorithm>
Цитата Сообщение от kravam Посмотреть сообщение
#include <stdio.h>
Цитата Сообщение от kravam Посмотреть сообщение
getchar ();
Зачем смешивать? Не новичок уже ведь.
linuxubuntu
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 55
18.02.2012, 18:38  [ТС]     Работа с битовыми операциями #5
а на чистом си каким образом с помощью операций << >> и т.д.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.02.2012, 18:42     Работа с битовыми операциями #6
C
1
2
3
4
5
6
int* transform ( int* first1, int* last1, int* result, int (*op) (int ) )
{
  while (first1 != last1)
    *result++ = op(*first1++);  
  return result;
}
Yandex
Объявления
18.02.2012, 18:42     Работа с битовыми операциями
Ответ Создать тему
Опции темы

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