我从某处将此代码转换为将十六进制字符串转换为普通字符串。 但我无法理解这一点。有人可以解释一下吗? 在此字符串中,第一行从字符串中获取每两个字符并将其转换为byte。 但是,我不明白为什么他们只将数组分配给字节数组的一半长度?
有时它也会出错,即如果Inputstring长度为350,字节长度为175,char长度为87.5,char数组仅分配给87,这不足以容纳字节数组中的所有字符。< / p>
public static string HextoString(string InputText)
{
byte[] bb = Enumerable.Range(0, InputText.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(InputText.Substring(x, 2), 16))
.ToArray();
//return Convert.ToBase64String(bb);
char[] chars = new char[bb.Length / sizeof(char)];
System.Buffer.BlockCopy(bb, 0, chars, 0, bb.Length);
return new string(chars);
}
答案 0 :(得分:1)
这是因为.Where(x => x % 2 == 0)
只将输入字符串过滤为具有偶数索引的值,因此输出的长度是原始值的一半。