2011-05-09 44 views
1

这似乎是一个简单的问题,但crypto ++似乎被设计成一种时髦的“尽可能钝”的方式,所以我想知道...Base64Decode:如何获取数据

如何从CryptoPP :: Base64Decode对象中获取二进制数据?假设我不想将它写入文件或以其他方式对其进行编码,那么如何才能获得实际的二进制数据?

编辑:弄明白了;不知道如何关闭/删除它,任何人?我现在在这里做什么适当的事情?

+0

你能给我们更多关于你到底想要达到什么的细节吗? – Vargas 2011-10-25 01:11:10

回答

1

没关系,想通了。作为参考,我想获得BufferedTransformation子类的MaxRetrievable和Get方法。

0

这似乎是它会是一个简单的问题,但加密++似乎 在一个时髦的设计,“作为钝地”八九不离十的方式,所以我不知道...

如果您不熟悉Crypto ++设计,那么这不是一个简单的问题。实际上有两种设计在工作。

首先是一个经典的更新/决赛。它在Crypto ++中用PutGet和朋友实现。

第二个是pipleline设计。这就是数据从源流向下沉,你会看到它,例如:

FileSource fs("Hello World", true /*pumpAll*/ 
    new HexEncoder(e, 
     new FileSink("encoded.txt")  
); // FileSource 

管道相当于Unix命令:

echo "Hello World" | base64 >> encoded.txt 

管道推广到:

Source -> Filter -> Filter -> ... -> Filter -> Sink 

在内部,Source将在第一个过滤器上调用Put;第一个过滤器将转换数据并在第二个过滤器上调用Put,依此类推。最后一个过滤器将在接收器上调用Put。更准确地说,Source和Filters会调用Put2,但这是一个实现细节。

如果没有水槽:

Source -> Filter -> NULL 

然后过滤将内部缓冲经变换的数据。您可以使用Get,GetWord16,GetWord32,MaxRetrievable,AnyRetrievable等从滤波器或接收器中提取数据。

PutGetMaxRetrievable和朋友都是BufferedTransformation接口的一部分,而这所有的过滤器和接收器实现(真的没有必要实现它的来源)的接口。如果一个班级不提供Put,Get和朋友,那么它不是过滤器或接收器。该课程的文档位于BufferedTransformation Class Reference

还有很多其他的东西,包括阻塞和泵送块中的数据,但对于Base64过滤器或对象并不是真的需要。上例中的pumpAll意味着一次推送所有数据。