GUID是以HEX爲基礎顯示的大隨機數。我想以較短的格式顯示此號碼,可以根據所有字母和數字說出。這是一個36基礎。以36個字母的格式顯示GUID
可以這樣說:2f1e4fc0-81fd-11da-9156-00036a0f876a
將變成3jEl9x6eZi
。
在.Net中是否有任何「準備好」的算法?
它需要是雙向的。
編輯:使用Base64是更好的解決方案。唯一的問題是Base64包含/
字符,它不適用於URI。
GUID是以HEX爲基礎顯示的大隨機數。我想以較短的格式顯示此號碼,可以根據所有字母和數字說出。這是一個36基礎。以36個字母的格式顯示GUID
可以這樣說:2f1e4fc0-81fd-11da-9156-00036a0f876a
將變成3jEl9x6eZi
。
在.Net中是否有任何「準備好」的算法?
它需要是雙向的。
編輯:使用Base64是更好的解決方案。唯一的問題是Base64包含/
字符,它不適用於URI。
Base64是我用,this將修復該問題與==和/和+
你介紹它,它是不可能的。你必須丟失信息:
>>> 16 ** len('2f1e4fc081fd11da915600036a0f876a')
340282366920938463463374607431768211456
>>> 36 ** len('3jEl9x6eZi')
3656158440062976
你需要更多的基數36位數來覆蓋所有可能的值。爲什麼不使用base 64呢?結果會更短(我假設這是這裏的目標),並且在.NET中有一個標準的解決方案。
值'3jEl9x6eZi'只是例如,它不是'真正'的價值。 – 2010-02-14 01:04:16
我認爲最接近的,你會發現它是Base36然而它不會與GIUD類型(只有一個Int16,Int32或Int64)工作。
這種轉換沒有內置任何內容。內置在使用基地64編碼一些接近:
string base64 = Convert.ToBase64String(theGuid.ToByteArray())
好的解決方案。但爲什麼每個字符串都以'=='結尾? '='它不是Base64格式的有效值。 – 2010-02-14 01:08:13
@Mendy:=字符用於填充最後一個字符組。 (它在RFC 1421標準中有規定。) – Guffa 2010-02-14 01:22:45
對於基地64,你可以用有效的(但尚未使用)的人代替無效字符。 IIRC,略少於96個可打印的ASCII字符。 – Steve314 2010-02-14 01:06:34
看看我的答案,看看我如何修正==,/和+問題 – Fredou 2010-02-14 02:22:50