Есть текстовой файл с числами от 0.7017017017017013 до 0.9999999999999999 в столбик.Как можно перевести эти числа в хэш sha224 используя C++ в Visual Studio? P.S Пробовал сам,но не получилось. Пример содержимого файла: 0.7017017017017013 0.7017017017017014 0.7017017017017015 0.7017017017017016 0.7017017017017017 0.7017017017017018 0.7017017017017019 0.7027027027027021 0.7027027027027022 0.7027027027027023 0.7027027027027024 0.7027027027027025
Не особо знаком хэшерованием,пробовал просто на лету всё делать,но нет,если проще на другом хэше сделать,то напиши пожалуйста на каком.
Файлы проекта прикрепи и мы тебе укажем, где твоя ошибка и как ее исправить. Вариант хэширования в твоем случае не играет роли, т.к. задача разовая и нет каких-либо ограничений
#include<iostream> #include <iomanip> #include "sha224.h" using namespace std; int main(int argc, char *argv[]) { for (double i = 1; i <= 999; ++i) for (double r = 1; r <= 9; ++r) cout << 0 << '.' << i << i << i << i << i << r << endl; return 0; }
а где в твоём коде вызов sha224 ? в примере Code: string input = "grape"; string output1 = sha224(input);
что то вроде того можно сделать Spoiler Code: $ cat main.cpp #include <iostream> #include "sha224.h" #include <string.h> #include <sstream> using std::string; using std::cout; using std::endl; const char* ConvertDoubleToString(double value){ std::stringstream ss ; ss << value; const char* str = ss.str().c_str(); return str; } int main(int argc, char *argv[]) { string hash = ""; string tmp_i = ""; string tmp_r = ""; for (double i = 1; i <= 10; ++i) { tmp_i = ConvertDoubleToString(i); for (double r = 1; r <= 9; ++r) { tmp_r = ConvertDoubleToString(r); hash = "0."+tmp_i+tmp_i+tmp_i+tmp_i+tmp_i+tmp_r; cout << hash << endl; hash = sha224(hash); cout << hash << endl; } } } Code: $ g++ main.cpp sha224.cpp -o sha224_sample $ ./sha224_sample | head -n 5 0.111111 93df830601538a1652a22f5a6d3c029cd733a88c4ac1dc21adbe8df9 0.111112 c0890409cdac1f98f369629cabee9dd5adc6ccb8c84fea5402f70ac3 0.111113
Программа выводит только для 0. 39303d65e3ec6458405d813332fa8f323ddeea7293bb27a6bd88ea49 0. 39303d65e3ec6458405d813332fa8f323ddeea7293bb27a6bd88ea49 0. 39303d65e3ec6458405d813332fa8f323ddeea7293bb27a6bd88ea49 0. 39303d65e3ec6458405d813332fa8f323ddeea7293bb27a6bd88ea49 0. ...
Code: #include <iostream> #include "sha224.h" #include <string.h> #include <sstream> using std::string; using std::cout; using std::endl; const char* ConvertDoubleToString(double value) { std::stringstream ss; ss << value; const char* str = ss.str().c_str(); return str; } int main(int argc, char *argv[]) { string hash = ""; string tmp_i = ""; string tmp_r = ""; for (double i = 1; i <= 10; ++i) { tmp_i = ConvertDoubleToString(i); for (double r = 1; r <= 9; ++r) { tmp_r = ConvertDoubleToString(r); hash = "0." + tmp_i + tmp_i + tmp_i + tmp_i + tmp_i + tmp_r; cout << hash << endl; hash = sha224(hash); cout << hash << endl; } } }
1>sha224.cpp 1>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\sha224.cpp(129): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(1772): note: см. объявление "sprintf" 1>Generator.cpp 1>Создание кода... 1>Crash safer.vcxproj -> C:\Users\R2BDO\Documents\Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.exe 1>Crash safer.vcxproj -> C:\Users\R2BDO\Documents\Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.pdb (Partial PDB) 1>Сборка проекта "Crash safer.vcxproj" завершена. ========== Перестроение всех проектов: успешно: 1, с ошибками: 0, пропущено: 0 ==========
хм, либо tmp_i не формируется, либо конструкция hash = "0." + tmp_i + tmp_i + tmp_i + tmp_i + tmp_i + tmp_r; в visual studio работает иначе попробуй вывести на экран tmp_i tmp_i = ConvertDoubleToString(i); cout << tmp_i << endl;
значит функция конвертирования(ConvertDoubleToString) не отрабатывает можешь погуглить другую реализацию конверта числа в строку
Все проще чем вы думаете. Ты подаешь на инпут в консоли в потоке чере pipeline. Он не подает инпут вообще, отсюда и ноль. В visualstduo тебе надо забирать каким нить getchr или любой другой функцией строку.