每X字节c ++ WINAPI删除空字节

时间:2013-06-10 18:21:27

标签: c++ winapi buffer bytearray

我有这样的缓冲区类型:

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

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

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

1 个答案:

答案 0 :(得分: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 ++标准容器,但这是我认为你要求的。