Ho una funzione che opera su blocchi di dati a 128 bit da una stringa di lunghezza arbitraria. Se la stringa non è equamente divisibile in blocchi di 128 bit, verrà riempita di conseguenza.Come posso scorrere su una stringa in blocchi di 128 bit?
Lo scopo è trasformare i dati nella stringa inserita nella funzione.
inizialmente ho pensato di loop attraverso la stringa tale:
//This might have stupid errors. Hopefully it stillg gets the point across.
for (int i = 0; i < strn.size(); i += 16)
{
string block = strn.substr(i, i + 15);
strn.replace(i, i + 15, block);
}
Credo che questo avrebbe funzionato, ma sto pensando ci deve essere un modo più elegante per fare questo. Un'idea che mi è venuta in mente era incapsulare strn
in una classe e implementare il mio iteratore in grado di leggere il suo contenuto in blocchi di 128 bit. Questo è interessante perché il costruttore potrebbe gestire il padding e alcune delle funzioni che uso attualmente potrebbero essere rese private, evitando così possibili abusi. Questo sembra un approccio fruttuoso? In tal caso, come si fa a implementare il proprio iteratore? Le spiegazioni dettagliate sono le benvenute, dato che sono molto inesperto del C++.
Ci sono altri approcci, forse migliori?
Grazie!
Sembra un approccio semplice ed elegante! Solo alcune domande: 1) C'è una ragione per il carattere di sottolineatura in '_128bit'? 2) Perché il typedef? Immagino che questo mi permetta di lanciare altre variabili e costanti come il suo tipo ... la mia inuizione è corretta? 3) Com'è che l'operatore '++' è già sovraccarico in questo esempio? Perché non devo farlo esplicitamente? Mille grazie e molte scuse per la mia ignoranza sui migliori costrutti C++! =) – blz
1. Se ricordo correttamente, i nomi delle variabili non possono iniziare con una cifra. 2. Hmm, non serve in realtà in C++, in C questo può ridurre il codice :). 3. Questo è il vantaggio dell'aritmetica del puntatore, opera in termini di elementi puntati, vedere qui per maggiori dettagli: http://stackoverflow.com/questions/394767/pointer-arithmetic BTW, questa è una soluzione C pura, senza C++ caratteristiche utilizzate – SomeWittyUsername
Ok questo ha senso. Comunque, sono ancora un po 'incerto sul bit dei typedef. La parola chiave 'typedef' non ti consente di creare un nuovo nome tipo? In quanto tale, il tuo esempio non dovrebbe specificare un nome per la struttura che hai definito? ... qualcosa come 'typedef struct {...}'? – blz