Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <iostream>
- #include <fstream>
- #include <vector>
- using namespace std;
- int get_file_len(const char *filename) {
- ifstream fin(filename, std::ifstream::ate | std::ifstream::binary);
- if (!fin.is_open()) {
- return -1;
- }
- int len= fin.tellg();
- fin.close();
- return len;
- }
- void task1() {
- cout << get_file_len("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc") << endl;
- }
- void task2(const char *filename) {
- int freq[256];
- for (long i = 0; i < 256; freq[i++] = 0);
- ifstream fin(filename,ios::binary);
- if (!fin.is_open()) {
- cout << "AAAAAAA" << endl;
- return;
- }
- char q;
- while (fin.get(q)) {
- freq[q]++;
- }
- for (int i = 0; i < 256; i++) {
- cout << i << "\t|" << freq[i]<<endl;
- }
- }
- void encode(const char *filename,const char *key_file, int cols = 5) {
- vector<int> key;
- for (int i = 0; i < cols; i++) {
- key.push_back(0);
- }
- ifstream fkey(key_file);
- for (int i = 0; i < cols; i++) {
- fkey >> key[i];
- }
- fkey.close();
- int len = get_file_len(filename);
- if (len == -1) {
- return;
- }
- int len_ = len;
- if (len % cols) {
- len_ += cols - len % cols;
- }
- vector<vector<char>> result;
- for (int i = 0; i < cols; i++) {
- result.push_back({});
- }
- ifstream f2code(filename, ios::binary);
- for (int i = 0; i < len_;i++) {
- if (i >= len)
- result[key[i % cols]-1].push_back('z');
- else
- result[key[i % cols]-1].push_back(f2code.get());
- }
- f2code.close();
- char *fout_name = NULL;
- fout_name = _strdup(filename);
- strcat(fout_name, ".ddlab1");
- ofstream fout(fout_name, ofstream::binary);
- for (int i = 0; i < cols; i++) {
- for (int j = 0; j < result[i].size(); j++) {
- fout.put(result[i][j]);
- }
- }
- fout.close();
- }
- void decode(const char* filename, const char* key_file, int cols = 5) {
- vector<vector<char>> result;
- for (int i = 0; i < cols; i++) {
- result.push_back({});
- }
- vector<int> key;
- for (int i = 0; i < cols; i++) {
- key.push_back(0);
- }
- ifstream fkey(key_file);
- for (int i = 0; i < cols; i++) {
- fkey >> key[i];
- }
- fkey.close();
- int len = get_file_len(filename);
- int rows = len / cols;
- ifstream fin(filename, ifstream::binary);
- for (int i = 0; i < cols; i++) {
- for (int j = 0; j < rows; j++) {
- result[i].push_back(fin.get());
- }
- }
- fin.close();
- char* fout_name = NULL;
- fout_name = _strdup(filename);
- strcat(fout_name, ".ddlab1_decoded");
- ofstream fout(fout_name, ofstream::binary);
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- fout << result[key[j] - 1][i];
- }
- }
- fout.close();
- }
- int main() {
- task1();
- task2("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc");
- encode("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc",
- "D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\key.txt");
- decode("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc.ddlab1",
- "D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\key.txt");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement