-1

假设我有一个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

除了遍历每个元素之外,还有一种有效的方法吗?有什么技巧可以用memcpyor做memset吗?

谢谢!

4

2 回答 2

0

如果您的数据按照示例中的方式排序,您可以循环递增 3 并复制前两个字节。否则,您将无法循环每个值。

于 2013-04-27T06:16:57.250 回答
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;
}

向量、列表等的代码相同。

于 2013-04-27T01:06:36.907 回答