在C ++中重组缓冲区中数据的有效方法

时间:2013-04-27 00:34:01

标签: c++ buffer memcpy memset

假设我有一个unsigned char缓冲区,如下所示:

unsigned char buffer = {'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'}

基本上我只想抓住A和B,并将它们打包成这样的新缓冲区:

unsigned char buffer2 = {'A', 'B', 'A', 'B', 'A', 'B'  ... etc

除了循环遍历每个元素之外,还有一种有效的方法吗?您可以使用memcpymemset吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我从未使用过memcpy,但我会这样做:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

class Modulo3
{
public:
    Modulo3();
    bool operator()(const char c);
private:
    int num_;
};

Modulo3::Modulo3()
{
    num_ = 0;
}

bool Modulo3::operator()(const char c)
{
    return num_++ % 3 == 0;
}

int main()
{
    string test = "ABCABCABC";

    Modulo3 func;
    remove_if(test.begin(),test.end(),func);

    return 0;
}

矢量,列表等的代码相同。

答案 1 :(得分:0)

如果你的数据按照例子的方式排序,你可以循环增加3并复制前两个字节。否则,你无法循环每一个值。