2

libb64のCルーチンに問題があります。コードは次のとおりです。

    base64_encodestate state;
    int outBufLen = 2 * nInBuf;
    *outBuf = new char[outBufLen];

    base64_init_encodestate(&state);
    int r1 = base64_encode_block(inBuf, nInBuf, *outBuf, &state);
    int r2 = base64_encode_blockend(*outBuf, &state);
    base64_init_encodestate(&state);

これにより、=が最後ではなく、最初に配置されます。

だから私はこれを試しました:

    base64_encodestate state;
    int outBufLen = 2 * nInBuf;
    *outBuf = new char[outBufLen];

    base64_init_encodestate(&state);
    int r1 = base64_encode_block(inBuf, nInBuf, *outBuf, &state);
    int r2 = base64_encode_blockend(*outBuf+ r1, &state);
    base64_init_encodestate(&state);

これは機能しますが、「大きな」(〜800KBのテキスト)ファイルでは機能しないため、end=を完全にスキップします。その場合、base64_encode_blockend(code_out、state)は、state-> result = 0のケースstep_Cに入ります。libb64関数によって報告されたサイズを使用してb64データをファイルに書き込もうとしましたが、終了を見逃しているか、公平です。わからない。

私はこれにかなりうんざりしています。コードは構造体のエンコードとデコードに基づいています。

また、base64エンコード/デコード用のWindows APIがあるかどうか誰かが知っていますか?私はC++標準のものを使用していないので、構造体を使用しません。

4

0 に答える 0