在 C # 中,除了尝试转换字符串并查看是否存在错误之外,是否还有其他方法来查看字符串是否是 Base 64编码的?我有这样的代码:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
我想避免“ Base-64字符串中的无效字符”异常,如果该值不是有效的 Base 64字符串,就会发生这种情况。我只想检查并返回 false,而不是处理异常,因为我预计有时这个值不会是一个基数为64的字符串。在使用 Convert 之前是否有一些方法可以检查。从 Base64String 函数? ?
谢谢!
更新:
谢谢你的回答。这里有一个扩展方法,你可以使用到目前为止,似乎可以确保您的字符串将通过转换。无异常的 FromBase64String。.NET 似乎忽略所有的尾随和结束空格时,转换为基数64,所以“1234”是有效的,因此是“1234”
public static bool IsBase64String(this string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
对于那些想知道测试与捕获和异常的性能的人来说,在大多数情况下,对于这个基于64的东西,在达到一定长度之前,检查比捕获异常更快。长度越小,速度越快
在我非常不科学的测试中: 对于字符长度为100,000-110000的10000次迭代,首先测试的速度要快2.7倍。
对于字符长度为1-16个字符的1000次迭代,对于总共16,000次测试,速度提高了10.9倍。
我确信,在某个时候,使用基于异常的方法进行测试会变得更好。我只是不知道那是什么时候。