2011-05-09 141 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意味着一次推送所有數據。