Void displaybits(int k)
{
int i;
int mask=1<<31 ;
for(i=1; i<=32; i++)
{
putchar(k & mask ? '1' : '0');
k<<=1;
if(i%8 == 0)
putchar(' ');
}
}
LRESULT CALLBACK ARH_SHENON_FANO(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
FILE *file_out;
file_out = fopen("D:\\1.txt","r");
char c;
int i;
fscanf(file_out,"%c",&c);
vector <Simbol> sim(1);
sim[0].c = c;
sim[0].kol = 1;
int n = 1;
bool k=1;
while( !feof(file_out) )
{
k=1;
fscanf(file_out,"%c",&c);
for(int i=0; i<n; i++)
{
if(sim[i].c == c)
{
sim[i].kol++;
k=0;
break;
}
}
if(1==k)
{
Simbol buf;
buf.c = c;
buf.kol=1;
sim.push_back(buf);
n++;
}
}
for( i=0; i<n; i++)
{
if(sim[i].c == c)
{
sim[i].kol--;
break;
}
}
vector <Simbol> sim_buf;
for(i=0; i<sim.size(); i++)
{
sim_buf.push_back(sim[i]);
}
fun(sim,sim_buf);
FILE *file_table;
file_table= fopen("D:\\1_table.txt","w+");
for( i = 0; i < sim.size(); i++)
{
fprintf(file_table,"\n%c\t",sim[i].c);
for( int j=0; j<sim[i].code.size(); j++ )
{
fprintf(file_table,"%d", sim[i].code[j]);
}
}
FILE *file_com;
file_com = fopen("D:\\1_com.txt","w+");
n=1;
vector<char> vec;
vec.push_back(NULL);
rewind(file_out);
fscanf(file_out,"%c",&c);
while( !feof(file_out) )
{
for( i = 0; i < sim.size(); i++)
{
if(sim[i].c == c)
break;
}
for(int j = 0; j < sim[i].code.size(); j++)
{
if(n%8==0)
{
vec.push_back(NULL);
vec[fabs(n/8-1)] |= sim[i].code[j];
}
else
{
vec[fabs(n/8)] |= sim[i].code[j]<< (8 - n%8);
}
n++;
}
fscanf(file_out,"%c",&c);
}
for( i = 0; i < vec.size(); i++ )
fprintf(file_com,"%c",vec[i]);
fclose(file_com);
fclose(file_out);
fclose(file_table);
switch (message)
{
case WM_COMMAND:
switch (wParam)
{
case IDOK:
EndDialog(hDlg,TRUE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return FALSE;
}
LRESULT CALLBACK DEARH_SHENON_FANO(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
FILE *file_out;
file_out = fopen("D:\\1.txt","r");
char c;
int i;
fscanf(file_out,"%c",&c);
vector <Simbol> sim(1);
sim[0].c = c;
sim[0].kol = 1;
int n = 0;
bool k=1;
while( !feof(file_out) )
{
k=1;
fscanf(file_out,"%c",&c);
for(int i=0; i<n; i++)
{
if(sim[i].c == c)
{
sim[i].kol++;
k=0;
break;
}
}
if(1==k)
{
Simbol buf;
buf.c = c;
buf.kol=1;
sim.push_back(buf);
n++;
}
}
for( i=0; i<n; i++)
{
if(sim[i].c == c)
{
sim[i].kol--;
break;
}
}
vector <Simbol> sim_buf;
for(i=0; i<sim.size(); i++)
sim_buf.push_back(sim[i]);
fun(sim,sim_buf);
FILE *file_com;
file_com = fopen("D:\\1_com.txt","r");
vector<char> vec;
FILE *file_decom;
file_decom = fopen("D:\\1_decom.txt","w+");
fscanf(file_com,"%c",&c);
while( !feof(file_com) )
{
vec.push_back(c);
fscanf(file_com,"%c",&c);
}
vector<int> vec_decom;
for( i=0; i < vec.size(); i++ )
{
for( int j = 7; j>=0; j--)
{
vec_decom.push_back(NULL);
vec_decom[n] = abs( ( vec[i]>>j ) % 2 );
n++;
for( int g = 0; g < sim.size(); g++ )
{
if(vec_decom == sim[g].code)
{
fprintf(file_decom,"%c", sim[g].c);
vec_decom.clear();
n=0;
break;
}
}
}
}
fclose(file_out);
fclose(file_com);
fclose(file_decom);
switch (message)
{
case WM_COMMAND:
switch (wParam)
{
case IDOK:
EndDialog(hDlg,TRUE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return FALSE;
}
Вывод: изучили алгоритм шифрования, дешифрования и сжатия.