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++標準のものを使用していないので、構造体を使用しません。