Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
eXeL@B —› Программирование —› перенаправление ввода/вывода в бинарном режиме C++ (или переоткрытие потока в новом режиме) |
Посл.ответ | Сообщение |
|
Создано: 28 мая 2008 17:00 · Личное сообщение · #1 в своей программе я использую cin/cout для ввода/вывода, но данные мне нужно читать в бинарном режиме, т.к. данные представляют собой зашифрованный код RSA алгоритмом. Работает все нормально до тех пор пока не встретится какй-то кривой символ. Я пробовол открывать исходный файл в бинарном режиме и все было ок, но все же хотелоль бы через cin |
|
Создано: 28 мая 2008 17:02 · Личное сообщение · #2 |
|
Создано: 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 в бинарном режиме |
|
Создано: 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); } } |
|
Создано: 28 мая 2008 19:54 · Поправил: s0larian · Личное сообщение · #5 |
|
Создано: 28 мая 2008 21:00 · Личное сообщение · #6 |
|
Создано: 28 мая 2008 21:18 · Личное сообщение · #7 |
|
Создано: 28 мая 2008 23:11 · Поправил: reversecode · Личное сообщение · #8 |
eXeL@B —› Программирование —› перенаправление ввода/вывода в бинарном режиме C++ (или переоткрытие потока в новом режиме) |