Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› перенаправление ввода/вывода в бинарном режиме C++ (или переоткрытие потока в новом режиме)
Посл.ответ Сообщение

Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 мая 2008 17:00
· Личное сообщение · #1

в своей программе я использую cin/cout для ввода/вывода, но данные мне нужно читать в бинарном режиме, т.к. данные представляют собой зашифрованный код RSA алгоритмом. Работает все нормально до тех пор пока не встретится какй-то кривой символ. Я пробовол открывать исходный файл в бинарном режиме и все было ок, но все же хотелоль бы через cin




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 28 мая 2008 17:02
· Личное сообщение · #2

вопрос-то где?
где код?



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 мая 2008 17:26 · Поправил: Модератор
· Личное сообщение · #3

int main(int argc, char** argv)
{
unsigned long p, q;
parseCommandLine(argc, argv, p, q);
RSADecryption* decryption;
try {
decryption = new RSADecryption(q, p);
} catch (invalid_argument& e) {
ofstream out(LOG_FILE);
if (out.good()) {
out << e.what();
}
return 0;
}
decryption->go(cin, cout);
delete decryption;
return 0;
}

в командной строке задаю RSADecryption.exe <test.enc >test.dec , а проге надо переоткрыть cin в бинарном режиме



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 мая 2008 17:38 · Поправил: Модератор
· Личное сообщение · #4

нужно либо в командной строке указать что файл должен быть открыт в бинарном режиме, либо в проге заново переоткрыть поток в std::ios::binary, но таких методов я не нашел

void RSADecryption::go(IN istream& in, OUT ostream& out)
{
if (in.bad() || out.bad()) {
return;
}
while (in.good()) {
unsigned long ch;
in.read((char*)&ch, sizeof(unsigned long));
//здесь вылетает при считывании символа
if (in.bad() || in.eof()) {
break;
}
unsigned __int64 val = powMod(unsigned __int64(ch), key_.d(), key_.n());
unsigned char decriptedChar = (unsigned char)(val);
out.put(decriptedChar);
}
}




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 28 мая 2008 19:54 · Поправил: s0larian
· Личное сообщение · #5

Читай просто из файла:


ifstream file("your name goes here", ios::binary);




Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 мая 2008 21:00
· Личное сообщение · #6

s0larian пишет:
Читай просто из файла:
ifstream file("your name goes here", ios::binary);


А все-таки может есть средства для изменение режима работы потока




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 мая 2008 21:18
· Личное сообщение · #7

Имейте совесть и пользуйтесь правкой вместо того, чтобы плодить кучу постов подряд.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 мая 2008 23:11 · Поправил: reversecode
· Личное сообщение · #8

>bazuka
наскоко я знаю флаг binary распространяеться только на filebuf и его наследников
ostream не неследник
поэтому указывайте в
>void RSADecryption::go(IN istream& in, OUT ostream& out)
правильные потоки
fstream если я неошибаюсь

cin в binary не переводиться


 eXeL@B —› Программирование —› перенаправление ввода/вывода в бинарном режиме C++ (или переоткрытие потока в новом режиме)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати