1. Главная
  2. Библиотека
  3. Программирование
  4. Реализовать консольную утилиту, считающую хеш от файла...
Разбор задачи

Реализовать консольную утилиту, считающую хеш от файла Утилита может считать 2 варианта хеша: CRC32 32-битный хеш через сумму 32-битных блоков данных (порядок big-endian) Утилита принимает имя файла и вариант расчета хеша как аргументы командной строки

  • Предмет: Программирование
  • Автор: Кэмп
  • #Основы алгоритмизации и программирования
  • #Языки программирования (C++, Java, Python и др.)
Реализовать консольную утилиту, считающую хеш от файла Утилита может считать 2 варианта хеша: CRC32 32-битный хеш через сумму 32-битных блоков данных (порядок big-endian) Утилита принимает имя файла и вариант расчета хеша как аргументы командной строки

Условие:

Реализовать консольную утилиту, считающую хеш от файла
1. Утилита может считать 2 варианта хеша:
- CRC32
- 32-битный хеш через сумму 32-битных блоков данных (порядок big-endian)
2. Утилита принимает имя файла и вариант расчета хеша как аргументы командной строки
3. Результат печатается в стандартный поток вывода

Аргументы программы:
```
./hasher -h
./hasher <filename> -m <mode>
./hasher -m <mode> <filename>
```


Где <mode> из \{crc32, sum32\}
Обратите внимание на следующие моменты:
1. Результат хеширования файла не должен зависеть от операционной системы или архитектуры CPU.
2. В случае ошибок утилита должна нотифицировать о них (текст выводить в стандартный поток ошибок std::cerr).
3. В случае некорректного использования утилита должна вернуть ошибку и подсказать пользователю, как её запускать (распечатать help в std::cerr ).
4. Если что-то пошло не так, дайте пользователю возможность понять, что именно.
5. Стиль программы свободный (camelCase/underscore), но он должен быть! Выберите стиль и придерживайтесь его.
6. Форматирование должно соответствовать clang-format (система предварительного тестирования это проверит).
7. Не надо придумывать CRC32 самому, возьмите реализацию попроще из сети.
8. Возьмите заготовку из репозитория и доделайте реализацию.

Решение:

  1. Сначала определим, что программа должна принимать аргументы командной строки. Допустимые варианты вызова следующие:
    • ./hasher -h
    • ./hasher <filename> -m <mode>
    • ./hasher -m <mode> <filename>
    При этом <mode> может быть либо "crc32", либо "sum32".

  2. Для обработки аргументов командной строки реализуем функцию printHelp, которая выводит корректное использование утилиты в поток ошибок (std::cerr).

  3. Далее реализуем две функции для вычисления хеша:
    • Для CRC32 используе...

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какой из подходов к вычислению хеша `sum32` обеспечивает независимость результата от порядка байтов (endianness) на различных архитектурах?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет