Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2020, 23:09   #11
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Не надо переводить старушку через дорогу ничего никуда. char ^ char даёт char
https://learnc.info/c/bitwise_operators.html

Последний раз редактировалось digitalis; 15.11.2020 в 23:11.
digitalis вне форума Ответить с цитированием
Старый 15.11.2020, 23:34   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Во-первых, это не C, а C#. Во-вторых, из-за того что ch1 типа char, а key типа int, происходит неявное преобразование ch1 из типа char в тип int. Скорее всего, компилятор жалуется на присвоение int в char, поэтому сделано явное преобразование в тип char перед присвоением.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.11.2020, 00:52   #13
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, это не C, а C#. Во-вторых, из-за того что ch1 типа char, а key типа int, происходит неявное преобразование ch1 из типа char в тип int. Скорее всего, компилятор жалуется на присвоение int в char, поэтому сделано явное преобразование в тип char перед присвоением.
BDA все таки, ответь мне человеческим понятным для моего уровня человеку. что после операции поразрядного оператора исключающего ИЛИ (H) 01001000 ^ int (88) 01011000 следует приведение в тип char, и результатом является опять двоичный код типа char?
bITA666 вне форума Ответить с цитированием
Старый 16.11.2020, 11:17   #14
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Откуда следует, что это С#? Я этого не вижу. Во-вторых, если в самом начале перевести int 88 в char или задать её именно в таком виде - меньше будет лишних телодвижений. Я так думаю...
digitalis вне форума Ответить с цитированием
Старый 16.11.2020, 12:14   #15
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Откуда следует, что это С#? Я этого не вижу. Во-вторых, если в самом начале перевести int 88 в char или задать её именно в таком виде - меньше будет лишних телодвижений. Я так думаю...
Это с книги Шилда, Я другое не могу понять.


Код:
using System;
class Encode {
static void Main() {
char ch1 = 'H';
char ch2 = 'i';
char ch3 = '!';
int key = 88;
Console.WriteLine("Исходное сообщение: " + ch1 + ch2 + ch3);
// Зашифровать сообщение.
ch1 = (char) (ch1 ^ key);
ch2 = (char) (ch2 ^ key);
ch3 = (char) (ch3 ^ key);
Console.WriteLine("Зашифрованное сообщение: " + ch1 + ch2 + ch3);
// Расшифровать сообщение.
ch1 = (char) (ch1 ^ key);
ch2 = (char) (ch2 ^ key);
ch3 = (char) (ch3 ^ key);
Console.WriteLine("Расшифрованное сообщение: " + ch1 + ch2 + ch3);
}
}
88 - 01011000 в двоичном коде
по таблице ascii
'H' - 01001000 в двоичном коде
Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда в том и только в том случае, если двоичные разряды сравниваемых операндов
оказываются разными, как в приведенном ниже примере.
0111 1111
1011 1001
^ __________
1100 0110

Возьмем пример 88 и 'H':
01011000
01001000
________

01010000
В двоичном коде 80
А в таблице ascii типа char это символ 'P'
вопрос как получился квадрат в результате шифрования если в двоичном коде типа char квадрат это 01111111?

Код:
Ниже приведен результат выполнения этой программы.
Исходное сообщение: Hi!
Зашифрованное сообщение: □1y
Расшифрованное сообщение: Hi!

Последний раз редактировалось bITA666; 16.11.2020 в 12:16.
bITA666 вне форума Ответить с цитированием
Старый 16.11.2020, 12:52   #16
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Цитата:
Это с книги Шилда
Шилд, наверно, великий телепат, раз знал - на каком языке у ТСа задание.
Касаемо квадрата - тут думать даже неинтересно. Если кодировать и раскодировать одним и тем же key - получится в любом случае нормально при любой "крякозябре" в зашифрованном виде. А как распечатается эта зашифрованная крякозябра - кому это интересно?
Принцип понятен, все вопросы отвечены.
Цитата:
Возьмем пример 88 и 'H':
01011000
01001000
________

00010000
В двоичном коде 80
Не 80, а 16 (10h), и в результате даёт символ: если в ASCII, то "треугольник остриём вправо", а как его будут отображать конкретные программы - это от них зависит. Чаще всего "квадратик" = "невозможный_для_отображения_символ ".
Изображения
Тип файла: jpg 123456.jpg (20.1 Кб, 8 просмотров)

Последний раз редактировалось digitalis; 16.11.2020 в 14:54.
digitalis вне форума Ответить с цитированием
Старый 16.11.2020, 13:50   #17
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Шилд, наверно, великий телепат, раз знал - на каком языке у ТСа задание.
Касаемо квадрата - тут думать даже неинтересно. Если кодировать и раскодировать одним и тем же key - получится в любом случае нормально при любой "крякозябре" в зашифрованном виде. А как распечатается эта зашифрованная крякозябра - кому это интересно?
Принцип понятен, все вопросы отвечены.
?
Я имею ввиду что при применении оператора исключающее ИЛИ как в данном примере то такой результат не получается, как вы выразились "крякозябры". Все равно получается не тот результат что написанно в книге. Почему так? Или релультат шифрования правильный?

Последний раз редактировалось bITA666; 16.11.2020 в 13:53.
bITA666 вне форума Ответить с цитированием
Старый 16.11.2020, 14:00   #18
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

О какой книге речь? Книг много, а бошка одна.
Всё правильно получается : зашифровали - расшифровали - результат совпал. Крякозяброй в данном случае символ Н зашифровался как прямоугольник, ну а потом обратно взад расшифровался правильно.

Последний раз редактировалось digitalis; 16.11.2020 в 14:43.
digitalis вне форума Ответить с цитированием
Старый 16.11.2020, 16:55   #19
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Цитата:
Возьмем пример 88 и 'H':
01011000
01001000
________

00010000
В двоичном коде 80
Не 80, а 16 (10h), и в результате даёт символ: если в ASCII, то "треугольник остриём вправо", а как его будут отображать конкретные программы - это от них зависит. Чаще всего "квадратик" = "невозможный_для_отображения_символ ".
А что такое 10h?
bITA666 вне форума Ответить с цитированием
Старый 16.11.2020, 17:13   #20
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

10h - это в 16-ой системе счисления ( h - hex от hexadecimal)

00010000 -> 16 в 10-ой или 10 в шестнадцатеричной.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про кодирование текста захаров Паскаль, Turbo Pascal, PascalABC.NET 1 05.11.2018 12:57
Задача про кодирование текста (не получается реализовать из-за буквы ё в ascii) jihot Паскаль, Turbo Pascal, PascalABC.NET 9 29.12.2013 09:41
Проблема с получением текста HTML из уже открытого окна IE Zamozhskiy Общие вопросы .NET 2 23.09.2011 18:20
Кодирование текста Crunkordie Общие вопросы Delphi 24 12.05.2011 13:38