Napisałem program mający "odwracać" zawartość pliku txt. Tzn.: znak o kodzie ASCII 255, zamieni na znak o kodzie 0. I to działa jak trzeba (no, o ile w linii nie jest za dużo znaków, ale to pewnie problem z pojemnością stringa). Problem zaczyna się gdy chcę zdekodować plik (czyli odpalić ten sam program na zakodowanym pliku). Program nie tyle robi to źle, co po prostu się crashuje. Poniżej kod:
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <ctype.h>
#include <fstream>
using namespace std;
int main()
{
fstream plikin,plikout;
string infile,outfile;
cout<<"Podaj nazwe pliku do odczytu (bez rozszerzenia): ";
cin>>infile;
infile+=".txt";
cout<<"Podaj nazwe pliku do zapisu (bez rozszerzenia): ";
cin>>outfile;
outfile+=".txt";
plikin.open(infile.c_str(),ios::in);
plikout.open(outfile.c_str(),ios::out);
while(!plikin.eof())
{
string linia="";
char bin[8];
getline(plikin,linia);
for(short j=0;j<linia.length();j++)
{
for(short i=0;i<=7;i++) bin[i]='0'; //koniec petli i
int liczba=0;
if(isdigit(linia[j]))liczba=(int)linia[j]-'0';
liczba=(int)linia[j];
itoa(liczba,bin,2);
int dec=0;
for(short k=0;k<=7;k++)
{
if(bin[k]=='0'){ bin[k]='1'; dec+=pow(2,k); }
else if(bin[k]=='1') bin[k]='0';
}//koniec petli k
plikout<<(char)dec;
}//koniec petli j
plikout<<endl;
} //koniec while
system("PAUSE");
return EXIT_SUCCESS;
}