Mam funkcję, która działa na 128-bitowych blokach danych z ciągu dowolnej długości. Jeśli łańcuch nie jest równomiernie podzielony na kawałki 128-bitowe, zostanie odpowiednio dopełniony.Jak mogę iterować po ciągu w 128-bitowych porcjach?
Celem jest przekształcenie danych w łańcuchu, który jest wprowadzany do funkcji.
I początkowo myślał o zapętlenie przez String takiego:
//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);
}
Myślę, że to będzie działać, ale myślę, że musi być bardziej elegancki sposób to zrobić. Jedną z pomysłów, które przychodziły mi do głowy, było zamknięcie klasy strn
i implementacja własnego iteratora, który może odczytać jego zawartość w 128-bitowych porcjach. Jest to atrakcyjne, ponieważ konstruktor może obsłużyć dopełnienie, a niektóre funkcje, z których obecnie korzystam, mogą stać się prywatne, co pozwoli uniknąć potencjalnych nadużyć. Czy wydaje się to owocnym podejściem? Jeśli tak, to w jaki sposób można wdrożyć własny iterator? Szczegółowe wyjaśnienia są mile widziane, ponieważ jestem bardzo niedoświadczony w C++.
Czy istnieją inne, być może lepsze, podejścia?
Dzięki!
To brzmi jak proste i eleganckie podejście! Tylko kilka pytań: 1) Czy istnieje powód, dla podkreślenia w "_128bit"? 2) Dlaczego typedef? Zgaduję, że to pozwala mi rzutować inne zmienne i stałe jako typ ... czy moja inuicja jest poprawna? 3) Jak to jest, że operator '++' jest już przeciążony w tym przykładzie? Dlaczego nie muszę tego robić jawnie? Wielkie dzięki i wiele przepraszam za moją niewiedzę o lepszych konstrukcjach C++! =) – blz
1. Jeśli dobrze pamiętam, nazwy zmiennych nie mogą zaczynać się od cyfry. 2. Hmm, nie ma potrzeby w C++, w C może to skrócić kod :). 3. Jest to zaleta arytmetyki wskaźnikowej, działa ona w odniesieniu do wskazanych elementów, zobacz tutaj po więcej szczegółów: http://stackoverflow.com/questions/394767/pointer-arithmetic BTW, to jest czyste rozwiązanie C, bez C++ użyte funkcje – SomeWittyUsername
OK, co ma sens. Wciąż jestem trochę niejasny w kwestii typedefs. Czy słowo kluczowe 'typedef' nie pozwala ci na stworzenie nazwy nowego typu? Czy Twój przykład nie powinien określać nazwy zdefiniowanej struktury? ... coś w stylu 'typedef struct {...}'? – blz