这似乎是一个简单的问题,但crypto ++似乎被设计成一种时髦的“尽可能钝”的方式,所以我想知道...Base64Decode:如何获取数据
如何从CryptoPP :: Base64Decode对象中获取二进制数据?假设我不想将它写入文件或以其他方式对其进行编码,那么如何才能获得实际的二进制数据?
编辑:弄明白了;不知道如何关闭/删除它,任何人?我现在在这里做什么适当的事情?
这似乎是一个简单的问题,但crypto ++似乎被设计成一种时髦的“尽可能钝”的方式,所以我想知道...Base64Decode:如何获取数据
如何从CryptoPP :: Base64Decode对象中获取二进制数据?假设我不想将它写入文件或以其他方式对其进行编码,那么如何才能获得实际的二进制数据?
编辑:弄明白了;不知道如何关闭/删除它,任何人?我现在在这里做什么适当的事情?
没关系,想通了。作为参考,我想获得BufferedTransformation子类的MaxRetrievable和Get方法。
这似乎是它会是一个简单的问题,但加密++似乎 在一个时髦的设计,“作为钝地”八九不离十的方式,所以我不知道...
如果您不熟悉Crypto ++设计,那么这不是一个简单的问题。实际上有两种设计在工作。
首先是一个经典的更新/决赛。它在Crypto ++中用Put
和Get
和朋友实现。
第二个是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
等从滤波器或接收器中提取数据。
Put
,Get
,MaxRetrievable
和朋友都是BufferedTransformation
接口的一部分,而这所有的过滤器和接收器实现(真的没有必要实现它的来源)的接口。如果一个班级不提供Put
,Get
和朋友,那么它不是过滤器或接收器。该课程的文档位于BufferedTransformation Class Reference。
还有很多其他的东西,包括阻塞和泵送块中的数据,但对于Base64过滤器或对象并不是真的需要。上例中的pumpAll
意味着一次推送所有数据。
你能给我们更多关于你到底想要达到什么的细节吗? – Vargas 2011-10-25 01:11:10