我有这样的缓冲区类型:

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

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

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

最佳答案

似乎您不想使用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++;
    }
}

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

就我个人而言,我宁愿使用C++标准容器来执行此操作,但这是我认为您要的。

09-06 14:46