Ich habe eine Funktion, die auf 128-Bit-Datenblöcke aus einer Zeichenfolge beliebiger Länge arbeitet. Wenn die Zeichenfolge nicht gleichmäßig in 128-Bit-Teile unterteilt werden kann, wird sie entsprechend aufgefüllt.Wie kann ich über eine Zeichenfolge in 128-Bit-Blöcken iterieren?
Der Zweck besteht darin, die Daten in der Zeichenfolge zu transformieren, die in die Funktion eingegeben wird.
Ich dachte zunächst eine solche durch den Strang von looping:
//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);
}
ich dies funktionieren würde erraten, aber ich denke, es muss eine elegantere Art und Weise, dies zu tun. Eine Idee, die mir in den Sinn kam, war, in eine Klasse zu kapseln und meinen eigenen Iterator zu implementieren, der seinen Inhalt in 128-Bit-Blöcken lesen kann. Das ist ansprechend, weil der Konstruktor mit Padding umgehen kann und einige der Funktionen, die ich gerade nutze, privat gemacht werden könnten, um möglichen Missbrauch zu vermeiden. Scheint dies ein fruchtbarer Ansatz? Wenn ja, wie geht man bei der Implementierung eines eigenen Iterators vor? Ausführliche Erklärungen sind sehr willkommen, da ich mit C++ sehr wenig Erfahrung habe.
Gibt es andere, vielleicht bessere Ansätze?
Danke!
, der wie ein einfacher und eleganter Ansatz klingt! Nur ein paar Fragen: 1) Gibt es einen Grund für den Unterstrich in '_128bit'? 2) Warum der Typdef? Ich schätze, das erlaubt mir, andere Variablen und Konstanten als seinen Typ zu werfen ... ist meine Inuition korrekt? 3) Wie kommt es, dass der Operator '++' in diesem Beispiel bereits überladen ist? Warum muss ich das nicht explizit machen? Vielen Dank und viele Entschuldigungen für meine Unkenntnis der feineren C++ Konstrukte! =) – blz
1. Wenn ich mich richtig erinnere, können Variablennamen nicht mit einer Ziffer beginnen. 2. Hmm, brauche eigentlich nicht in C++, in C kann das den Code verkürzen :). 3. Das ist der Vorteil der Zeigerarithmetik, es arbeitet in Bezug auf die spitzen Elemente, siehe hier für weitere Details: http://stackoverflow.com/questions/394767/pointer-arithmetik BTW, das ist eine reine C-Lösung, kein C++ Funktionen verwendet – SomeWittyUsername
Ok, das macht Sinn. Ich bin jedoch immer noch etwas unklar über Typdefs. Ist es nicht möglich, mit dem Schlüsselwort 'typedef 'einen neuen Typnamen zu erstellen? Sollte Ihr Beispiel also keinen Namen für die von Ihnen definierte Struktur angeben? ... etwas wie 'typedef struct {...}'? – blz