GUID में बाइट्स का क्रम उनके ToString()
. के क्रम के समान नहीं है लिटिल-एंडियन सिस्टम पर प्रतिनिधित्व।
ToString() का उपयोग करने के बजाय आपको guid.ToByteArray() का उपयोग करना चाहिए।
और, आपको new Guid(byte[] b)
. का उपयोग करना चाहिए इसे बनाने के लिए, बजाय $str
. के ।
इसे शुद्ध C# में व्यक्त करने के लिए:
public string GuidToBase64(Guid guid)
{
return System.Convert.ToBase64String(guid.ToByteArray()); // Very similar to what you have.
}
public Guid Base64Toguid(string base64)
{
var bytes = System.Convert.FromBase64String(base64);
return new Guid(bytes); // Not that I'm not building up a string to represent the GUID.
}
GUID आलेख के "मूल संरचना" अनुभाग पर एक नज़र डालें। अधिक जानकारी के लिए विकिपीडिया पर।
आप देखेंगे कि अधिकांश डेटा "मूल" अंतहीनता में संग्रहीत होता है ... यही वह जगह है जहां से भ्रम आ रहा है।
उद्धृत करने के लिए:
संपादित करें:
पॉवरशेल संस्करण:
function base64toguid
{
param($str);
$b = [System.Convert]::FromBase64String($str);
$g = new-object -TypeName System.Guid -ArgumentList (,$b);
return $g;
}
एक अतिरिक्त चेतावनी के रूप में, आप वैकल्पिक रूप से अपनी स्ट्रिंग के अंत से "==" को ट्रिम कर सकते हैं, क्योंकि यह केवल पैडिंग है (यदि आप स्थान बचाने की कोशिश कर रहे हैं तो इससे मदद मिल सकती है)।