2

私は次のようなバッファタイプを持っています:

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

したがって、 Xごと (この例では 2 バイトごと) に null バイトを削除する必要があります。バッファーにメルトバイトがあるため、すべてのヌルバイトを削除したくありません。したがって、範囲を削除して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 に答える