如何迭代128位块中的字符串?

blz*_*blz 6 c++ iterator stdstring

我有一个函数可以处理来自任意长度字符串的128位数据块.如果字符串不能均匀地分成128位的块,则会相应地填充它.

目的是转换输入函数的字符串中的数据.

我最初想过循环字符串这样:

//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);
}
Run Code Online (Sandbox Code Playgroud)

我想这会起作用,但我认为必须有一种更优雅的方式来做到这一点.想到的一个想法是封装strn在一个类中并实现我自己的迭代器,它可以以128位块的形式读取其内容.这很有吸引力,因为构造函数可以处理填充,我当前使用的一些函数可以是私有的,从而避免了潜在的误用.这看起来像是一种富有成效的方法吗?如果是这样,那么如何实现自己的迭代器呢?我非常欢迎详细的解释,因为我对C++缺乏经验.

还有其他的,或许更好的方法吗?

谢谢!

Som*_*ame 3

有很多方法。其中一种更简单直接的方法是这样的:您可以创建自己的类型,大小恰好为 128 位;简单struct就可以完成工作。

typedef struct
{
    char buf[16];
} _128bit;
Run Code Online (Sandbox Code Playgroud)

并用它来迭代你的字符串。将字符串的开头强制转换为此结构类型:_128bit* start = (_128bit*)buffer;并使用整型指针算术开始对其进行迭代。上的所有操作都start将根据其大小进行操作。例如 ,start++将向前移动 128 位;start--将向后移动 128 位。到达所需位置后,将其重新转换为所需类型并执行操作。