2

我有一个像这样的缓冲区类型:

unsigned char buffer[] = {
   0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00,..
};

所以我需要每X删除一个空字节(在这个例子中每 2 个字节)。我不想删除所有空字节,因为在我的缓冲区中我有融化字节。所以只需要删除一个范围并在 WinAPI 中。我怎样才能做到这一点?

我仍然对 C++ 不太满意,缓冲区也可能很大。我认为正确的方法是通过memcpy循环复制缓冲区,但我找不到语法。

4

1 回答 1

2

您似乎不想使用 C++ 的任何更强大的功能,所以我怀疑您真的在寻找 C 风格的例程。看起来像这样:

void copyskip(void *dest, const void *src, size_t srclen, size_t skip)
{
    size_t destidx = 0;
    for (size_t srcidx=0; srcidx<srclen; )
    {
        if ((srcidx+1) % skip != 0)
        {
            ((char*)dest)[destidx] = ((char*)src)[srcidx];
            destidx++;
        }
        srcidx++;
    }
}

您需要在调用之前分配目标缓冲区。对于您的示例,您将为 skip 参数传递 3 。

就我个人而言,我更愿意使用 C++ 标准容器来做这件事,但这是我认为你所要求的。

于 2013-06-10T18:49:50.093 回答