Codice: Seleziona tutto
using namespace std;
int parse(std::ifstream &in, string &output){
char buff[100], ch;
while (true){
for (size_t t = 0; t < 100; ++t)buff[t] = '\0';
if (in.peek() == 'd'){
in.get();
cout << "trovato dictionary\n";
//cout << "{ ";
while (in.peek() != 'e'){
string key;
parse(in, key);
if (in.good()){ cout << "good\n"; }
else { cout << "bad\n"; return ""; }
string value;
parse(in, value);
cout << '"' << key << "' =>" << value << '\n';
}
cout << " } fine dict\n";
}
else if (in.peek() == 'l'){
cout << "trovata lista\n ";
ch = in.get(); //rimuovo la 'l'
parse(in, output); //mi richiamo
in.get(); //rimuovo la 'i';
}
else if (in.peek() == 'i'){
ch = in.get();
in.getline(buff, 100, 'e');
long long val = atoll(buff);
cout << "trovato numero" << val << '\n';
output = string(buff);
}
else if (isdigit(in.peek()))
{
in.getline(buff, 100, ':');
long long len = atoll(buff) + 1;
cout << "LEN: " << len << '\n';
char *s = (char*)malloc(len*sizeof(char));
for (size_t t = 0; t < len; ++t)s[t] = '\0';
in.getline(s, len);
//cout << "trovata stringa: "<< s<<'\n';
output = string(s);
}
return "0";
}
}
descrizione del bencode:
<lunghezza_stringa>:<sequenza di lettere> per le stringhe ES: 4:ciao per la stringa "ciao"
i<numero>e la codifica dei numeri ES: i123e per il numero 123
d<stringa><oggetto bencode><stringa><oggetto bencode>...e per i dizionari ES: d4:ciaoi23e5:Luciai22ee {(ciao,23),(Lucia,22)}
l<oggetto bencode><oggetto bencode>...e per le liste li22e6:pranzoe per [22, pranzo]