我有这样的缓冲区类型:
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++标准容器来执行此操作,但这是我认为您要的。