在C#中将Hex字符串转换为普通字符串

时间:2014-07-01 08:41:28

标签: c# ienumerable

我从某处将此代码转换为将十六进制字符串转换为普通字符串。 但我无法理解这一点。有人可以解释一下吗? 在此字符串中,第一行从字符串中获取每两个字符并将其转换为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);
}

1 个答案:

答案 0 :(得分:1)

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