我目前正在研究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