我有这样的缓冲区类型:
unsigned char buffer[] = {
0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00, 0xB8, 0xB8, 0x00,..
};
所以我需要删除每个 X 的空字节(本例中每2个字节)。我不想删除所有空字节,因为在我的缓冲区中我有熔化字节。 所以只需要在WinAPI中删除范围。我怎么能这样做?
我对C ++仍然不太满意,缓冲区可能很大。
我认为正确的方法是在循环中通过memcpy
复制缓冲区,但我找不到语法。
答案 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 ++标准容器,但这是我认为你要求的。