问:有没有更好的方法?
VB.Net
Function GuidToBase64(ByVal guid As Guid) As String
Return Convert.ToBase64String(guid.ToByteArray).Replace("/", "-").Replace("+", "_").Replace("=", "")
End Function
Function Base64ToGuid(ByVal base64 As String) As Guid
Dim guid As Guid
base64 = base64.Replace("-", "/").Replace("_", "+") & "=="
Try
guid = New Guid(Convert.FromBase64String(base64))
Catch ex As Exception
Throw New Exception("Bad Base64 conversion to GUID", ex)
End Try
Return guid
End Function
C#
public string GuidToBase64(Guid guid)
{
return Convert.ToBase64String(guid.ToByteArray()).Replace("/", "-").Replace("+", "_").Replace("=", "");
}
public Guid Base64ToGuid(string base64)
{
Guid guid = default(Guid);
base64 = base64.Replace("-", "/").Replace("_", "+") + "==";
try {
guid = new Guid(Convert.FromBase64String(base64));
}
catch (Exception ex) {
throw new Exception("Bad Base64 conversion to GUID", ex);
}
return guid;
}
6条答案
按热度按时间bxjv4tth1#
您可能想要查看此站点:http://prettycode.org/2009/11/12/short-guid/
它看起来和你现在做的很像。
qzlgjiam2#
使用该技术来格式化GUID以用于URL或文件名的一个问题是,两个不同的GUID可以产生仅大小写不同的两个值,例如:
由于URL有时被解释为不区分大小写,而在Windows中,文件路径和文件名不区分大小写,因此这可能会导致冲突。
ewm0tg9j3#
我知道你在最后删掉==的原因是因为你可以确定对于GUID(16字节),编码后的字符串 * 总是 * 以==结尾,所以每次转换可以节省2个字符。
除了已经提到的@Skurmedal(在输入无效字符串的情况下应该抛出异常),我认为您发布的代码已经足够好了。
deyfvvtc4#
如果你的方法不能将传递给它的Base64转换成GUID,你不应该抛出一个异常吗?传递给方法的数据显然是错误的。
xeufq47z5#
在
.NET Core
中,您可以使用Spans来获得更好的性能,并且无需分配内存。要了解更多信息,请阅读有关使用high-performance techniques to base64 encode a guid的信息,以及一个非常好的video explanation。
0mkxixxg6#
有一个方法,我正在使用编码以及缩短我的URL(Guid):https://dotnetfiddle.net/iQ7nGv