Base64Encoder是一个接收任何数据输入并将之转换成base64编码的过滤器,并可选地在每行满72个字符时进行换行。
在现行版本的Crypto++中,类Base64Encoder对象在销毁时并没有执行对缓冲区中的数据进行编码。因此,除了在一个包含Base64Encoder过滤器的过滤器对象链中,当Base64Encoder之前没有其他过滤器时,函数MessageEnd()会被自动调用外,我们必须在数据输入结束时显式地调用函数MessageEnd()。
(注意:MessageEnd()的nPropagation参数能被使用的情况是:当和Base64Encoder关联的其他过滤器对象不需要message-end信号时)。
下面来看看使用Base64Encoder的实例吧:
// Binary data
byte const* pbData = ...;
unsigned int nDataLen = ...;
// Encode with line breaks (default).
// Ordinarily, we would now have to call MessageEnd() to flush
// Base64Encoder's buffer. However, the 'true' parameter will cause
// the StringSource::PumpAll() method to be called, and that method
// will cause MessageEnd() to be triggered implicitly.
StringSource(pbData, nDataLen, true,
new Base64Encoder(
new FileSink("base64-encoded.dat")));
// Encode without line breaks.
StringSource(pbData, nDataLen, true,
new Base64Encoder(
new FileSink("base64-encoded.dat"),
false));