2010-06-22 58 views
1

我需要做一個128位GUID的字符串表示形式,代表8位塊而不是4位;所以像基地256:/爲什麼?因爲我需要縮短GUID的字符串十六進制表示的長度,所以它太長了。我有一個最大數組大小爲31加NULL結束符。此外,字符值不能從0x000到0x01F ....這讓我很頭疼,但我知道它可以完成。如何以最好和最安全的方式提出任何建議?現在我只是用memcpy和添加0x01F,但數字在我腦海中不斷彈起......不能釘住他們!我必須相互轉換:\Base 256 GUID字符串表示w /字符偏移量0x01F

+0

存儲源GUID的確切程度? – sharptooth 2010-06-22 09:20:25

+0

作爲OLESTR o.o – 2010-06-22 09:22:48

回答

2

嘗試使用base64編碼:它爲每個字符打包6位,並且仍然便攜。您將需要22個字符以便攜方式存儲128位GUID。

+0

這會在某個地方有所作爲嗎? 8位太多(不便攜)?關於如何正確處理轉換的建議?我避免了字編碼,因爲它類似於相反的o〜o – 2010-06-22 09:24:08

+0

您需要0來獲取與字符串sentinel值的C++結尾衝突的8位,所以您最終得到一個字節數組。如果你想繼續使用字符串,你還必須小心,在使用不同的代碼頁時不會翻譯它們。另外您的要求狀態00-1F中沒有組合不被使用。 Base64在這些約束條件下的性能差不多。 – 2010-06-22 09:36:58

+0

「......你還必須小心,在使用不同的代碼頁時他們沒有被翻譯......」 - 你呢?但是這隻有當人們試圖通過視覺來閱讀和複製該死的東西或者我錯過了某些東西時才真正相關在課堂上我從未上過學?我不認爲有人會閱讀加密文件....最有可能!我有點擔心突然改變的位/字節順序等待計算機和我編寫的代碼編譯進行轉換。 o.o – 2010-06-22 09:47:16

0

讓OLESTR首先將其轉換爲帶有IIDFromString()的GUID,然後使用base64 as user Peter Tillemans suggests

+0

好吧...我接受它我加入'\ 0'使它成爲132位,因爲6x22很好132不是128,這就是他所說的「你需要0到得到與字符串sentinel值的C++端衝突的8位,所以你最終得到一個字節數組。「我也認爲我會一點一點地複製,在這種情況下,我會將它複製到較低字節的高六位?爲了照顧字符偏移.... – 2010-06-22 10:21:56