Code: // cl /EHsc hashNumbas.cpp sha224.cpp #include <stdlib.h> #include <stdio.h> #include "sha224.h" int main() { SHA224 ctx = SHA224(); ctx.init(); FILE* f = fopen("numbas.txt", "r"); double x; while(1 == fscanf(f, "%lf\r\n", &x)) { printf("%.16f\n", x); ctx.update((unsigned char*)&x, sizeof(x)); } fclose(f); unsigned char digest[SHA224::DIGEST_SIZE]; ctx.final(digest); for(int i = 0; i < SHA224::DIGEST_SIZE; ++i) printf("%02x", digest[i]); printf("\n"); return 0; } Если требуется хэш не double чисел, а просто текста в файле, тогда ctx.update цикл будет: Code: //... char buf[32]; while(fgets(buf, sizeof(buf), f)) { printf("%s", buf); ctx.update((unsigned char*)buf, strlen(buf) - 1); } fclose(f); //...
--------------------------- Microsoft Visual C++ Runtime Library --------------------------- Debug Assertion Failed! Program: ...Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.exe File: minkernel\crts\ucrt\src\appcrt\stdio\input.cpp Line: 29 Expression: stream != nullptr For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) Выдал ошибку
При компиляции ошибок не выдавал вроде 1>------ Перестроение всех файлов начато: проект: Crash safer, Конфигурация: Debug Win32 ------ 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>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\generator.cpp(10): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_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(207): note: см. объявление "fopen" 1>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\generator.cpp(13): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_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(1195): note: см. объявление "fscanf" 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 ==========
FILE* f = fopen("numbas.txt", "r"); if(!f) { puts("Error, input file numbas.txt not found, exiting..."); getchar(); return -1; } //...
Не находит файл numbas.txt что ли? Если запускаешь прогу непосредственно из студии, то искать этот файл она будет не в папке с готовым екзешником, а в папке с исходным кодом проекта. По крайней мере в студии 2013 так.
Пример работы программы: ... 115 116 117 118 119 120 121 122 794293b5706d6f85da86d164393511bb834cd222812a2016e68bb54c (на этом программа заканчивается,так как 122 последнее число)
Так это уже зависит от того по какому образцу ты вывод делал. Елси по тому что приведено выше, то вроде бы там так и задумано, вывод только последнего хэша. Чтобы выводило хэш от каждой строки, нужно вычисление и распечатку хэша перенести в цикл while. Code: // cl /EHsc hashNumbas.cpp sha224.cpp #include <stdlib.h> #include <stdio.h> #include "sha224.h" int main() { SHA224 ctx = SHA224(); FILE* f = fopen("numbas.txt", "r"); char buf[32]; unsigned char digest[SHA224::DIGEST_SIZE]; while (fgets(buf, sizeof(buf), f)) { printf("%s", buf); ctx.init(); ctx.update((unsigned char*)buf, strlen(buf) - 1); ctx.final(digest); for (int i = 0; i < SHA224::DIGEST_SIZE; ++i) printf("%02x", digest[i]); printf("\n"); } fclose(f); return 0; Вот так должно по идее от каждой распечатывать.