@badguy05

Как исправить программу, чтобы исходное сообщение равнялось дешифрованному?

#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
using namespace std;

int main() {
	setlocale(LC_ALL, "rus");
	char msg[] = "Привет мир!";
	unsigned char key = 84;
	
	int N = strlen(msg);
	cout << N << endl;
	
	
	for (int i = 0; i < N; ++i) {
	
		msg[i] ^= key;
		msg[i] = ((msg[i] >> 2) | (msg[i] << 6));
}

	

	for (int i = 0; i < N; ++i) cout << msg[i];
	cout << endl;

	
	for (int i = 0; i < N; ++i) {
		msg[i] = ((msg[i] >> 6) | (msg[i] << 2));
		msg[i] ^= key;
}


	for (int i = 0; i < N; ++i) cout << msg[i];
	cout << endl;	
	
	
	return 0;
}
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
Ocelot
@Ocelot
Преобразовывать символ в unsigned char, перед тем как делать сдвиг. Левый сдвиг знаковой переменной — это undefined behavior.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 апр. 2020, в 23:31
50000 руб./за проект
07 апр. 2020, в 23:07
2000 руб./за проект