Advertisement
Guest User

T12

a guest
Apr 4th, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4. #include<thread>
  5. #include<mutex>
  6. typedef unsigned char BYTE;
  7.  
  8. using namespace std;
  9. mutex m;
  10. void XOR(int begin, int end, vector<BYTE> in, vector<BYTE> key, vector<BYTE> &rez){
  11.     for(int i= begin; i< end; i ++){
  12.         int k = i % 256;
  13.         BYTE tmp;
  14.         tmp = in[i] ^ key[k];
  15.         //rez.emplace(rez.end(), tmp);
  16.         //rez.push_back(tmp);
  17.         rez[i] = tmp;
  18.         //cout<< i ;
  19.     }
  20.  
  21. }
  22.  
  23. vector<BYTE> fileToVector(string filename){
  24.     int size;
  25.     ifstream file;
  26.     file.open(filename, ios::in|ios::binary);
  27.     file.read((char*)&size, 4);
  28.     file.seekg(4, ios::beg);
  29.     vector<BYTE> v(size);
  30.     file.read((char*)&v[0],size);
  31.     return v;
  32. }
  33.  
  34.  
  35.  
  36. int main(){
  37.     int thread_num = 22 ;
  38.     vector<BYTE> in = fileToVector("in.dat");
  39.     vector<BYTE> key = fileToVector("key.dat");
  40.     vector<BYTE> out(in.size());
  41.     thread t[thread_num];
  42.  
  43.     int split = in.size()/thread_num;
  44.  
  45.     for(int i=0; i<thread_num - 1; i++){
  46.         t[i] = thread(XOR, i*split, (i+1)*split, in, key, ref(out));
  47.     }
  48.  
  49.     //nit koja kupi ostatak kad broj niti nije stepen dvojke
  50.     t[thread_num - 1] = thread(XOR, (thread_num - 1)*split,in.size(), in, key, ref(out));
  51.  
  52.     for(int i=0; i<thread_num; i++){
  53.         t[i].join();
  54.     }
  55.  
  56.     ofstream f;
  57.     f.open("test.dat", ios::binary);
  58.     int vel = out.size();
  59.     f.write((char*)&vel, sizeof(vel));
  60.  
  61.     for(BYTE i:out)
  62.         f<<i;
  63.  
  64.  
  65.  
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement