C# 在C语言中将十六进制字符串转换为普通字符串#

C# 在C语言中将十六进制字符串转换为普通字符串#,c#,ienumerable,C#,Ienumerable,我从某处得到了将十六进制字符串转换为普通字符串的代码。 但我不能理解这一点。有人能解释一下吗? 在这个字符串中,第一行从字符串中提取每两个字符并将其转换为字节。 但是,我不明白为什么他们只把数组分配给字节数组的一半长度 有时它也会出错,即如果Inputstring长度为350,字节长度为175,字符长度为87.5,并且字符数组仅分配给87,这不足以容纳字节数组中的所有字符 public static string HextoString(string InputText) { byte

我从某处得到了将十六进制字符串转换为普通字符串的代码。 但我不能理解这一点。有人能解释一下吗? 在这个字符串中,第一行从字符串中提取每两个字符并将其转换为字节。 但是,我不明白为什么他们只把数组分配给字节数组的一半长度

有时它也会出错,即如果Inputstring长度为350,字节长度为175,字符长度为87.5,并且字符数组仅分配给87,这不足以容纳字节数组中的所有字符

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);
}

这是因为
.Where(x=>x%2==0)
只将输入字符串过滤为那些具有偶数索引的值,因此输出的长度将是原始字符串的一半