有人能告诉我为什么下面的代码间歇性地抛出异常吗? 我正在运行 Vista Ultimate 32 位和 VS2010 .NET4
byte[] saltBytes = new byte[32];
RNGCryptoServiceProvider.Create().GetBytes(saltBytes);
string salt = System.Text.UnicodeEncoding.Unicode.GetString(saltBytes);
byte[] saltBytes2 = System.Text.UnicodeEncoding.Unicode.GetBytes(salt);
int i = 0;
foreach(byte b in saltBytes)
{
if (saltBytes[i] != saltBytes2[i])
{
throw new Exception();
}
i++;
}
最佳答案
这可能是因为随机字节的任意序列不一定可转换为合法的 unicode 字符串。
当您的随机字节可转换为合法的 unicode 时,您的编码/解码将无误地工作;当它们不可转换时,您就会遇到问题。
如果您需要随机字节序列的字符串表示,那么您可能应该使用 Base-64 编码:
string salt = Convert.ToBase64String(saltBytes);
byte[] saltBytes2 = Convert.FromBase64String(salt);
关于.net - 使用 System.Text.UnicodeEncoding.Unicode.GetString(byte[]) 反向编码字节数组时间歇性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543752/