我目前正在研究MongoDb作爲一個可能的數據庫選項,而且我在處理Guid序列化時遇到了問題。起初我認爲這可能是C#驅動程序序列化中的一個錯誤,但現在我認爲這更可能是我的天真假設。base64指導base64
要幫我轉換BSON的base64表示來回的GUID,我寫了幾個小的PowerShell功能,以幫助:
function base64toguid
{
param($str);
$b = [System.Convert]::FromBase64String($str);
$hex = "";
foreach ($x in $b) {
$hex += $x.ToString("x2");
}
$g = new-object -TypeName System.Guid -ArgumentList $hex;
return $g;
}
function guidtobase64
{
param($str);
$g = new-object -TypeName System.Guid -ArgumentList $str;
$b64 = [System.Convert]::ToBase64String($g.ToByteArray());
return $b64;
}
我有這個問題的一個例子:
:) guidtobase64("53E32701-9863-DE11-BD66-0015178A5E3C");
ASfjU2OYEd69ZgAVF4pePA==
:) base64toguid("ASfjU2OYEd69ZgAVF4pePA==");
Guid
----
0127e353-6398-11de-bd66-0015178a5e3c
而且從蒙戈外殼:
:) mongo
MongoDB shell version: 1.6.5
connecting to: test
> b = new BinData(3, "ASfjU2OYEd69ZgAVF4pePA==");
BinData(3,"ASfjU2OYEd69ZgAVF4pePA==")
> b.hex();
127e353639811debd66015178a5e3c
>
因此,大家可以看到,我的Guid得到b ack與我輸入的內容不匹配。我的函數和hex()返回相同的內容。如果你原來的比較結果:
53E32701-9863-DE11-BD66-0015178A5E3C
0127e353-6398-11de-bd66-0015178a5e3c
你可以看到第3套六角對反轉,但最後2套不是。這讓我覺得有一些關於Guid.ToString(),我不明白。
任何人都可以教育我嗎?
這是什麼語言? – 2011-03-02 19:11:59
這些腳本位於Powershell中。我使用該字符串的原因是因爲我無法弄清楚如何使用-ArgumentList傳遞字節數組。 – 2011-03-02 19:26:16
這就是我錯過的神奇逗號。每天學些新東西。 – 2011-03-02 19:34:30