有没有一种方法可以调整这个函数,使它不会;不要使用LINQ?(将字节数组转换为字符串)

本文关键字:LINQ 字节 字符串 转换 数组 字节数 调整 方法 一种 有没有 函数 | 更新日期: 2023-09-27 18:14:10

有没有办法改变这个函数,将字节数组转换为字符串,这样它就不用LINQ了?(使其与以前的.NET版本兼容(?

private string ByteToString(byte[] data)
{
    return String.Concat(data.Select(b => b.ToString("x2")));
}

在网上找到的大多数方法似乎都返回了一个不可打印的unicode字符串。上面的代码返回了一个安全的字符串(例如b8b30dcfac41ebd5313107adf7054024fb1c69,而不是大量的ASCII字符(,但我真的不明白上面的函数在做什么(尤其是关于"x2"参数。

有没有一种方法可以调整这个函数,使它不会;不要使用LINQ?(将字节数组转换为字符串)

当然,如果您只想让上面的代码成为"非LINQ",那么您可以将其滚动到foreach循环中。String.Concat()只是将IEnumerable连接成一个字符串,我们可以使用StringBuilder:

private string ByteToString(byte[] data)
{
    var builder = new StringBuilder();
    for (int i=0; i<data.Length; i++)
    {
        builder.Append(data[i].ToString("x2"));
    }
    return builder.ToString();
}

可能有很多方法可以做到这一点,但这将是您列出的LINQ代码的一个相当字面的翻译。

private string ByteToString(byte[] data)
{
    return BitConverter.ToString(data).Replace("-", "").ToLowerInvariant();
}

顺便说一句,当你以.NET 2为目标时,你可以使用Linq-to-Objects,这要归功于LinqBridge(当然你仍然需要VS2008(

这就是你想要的:

  string s = System.Text.Encoding.UTF8.GetString(bytes);

反过来:

  byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);

首先,您只需要将字节转换为更有用的东西,例如UTF8,然后就可以从中获得字符串。类似于(在我的例子中:iso-8859-1(:

    buf = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, buf);
    tempString = Encoding.UTF8.GetString(buf, 0, count);

有没有一种方法可以改变这个函数,将字节数组转换为一个字符串,所以它不使用LINQ?(使其与以前兼容.NET版本(?

假设你仍然可以使用C#3或更高版本,你可以做:

 return string.Concat(Array.ConvertAll(data, b => b.ToString("x2")));

然而,我真的不明白上面的函数在做什么(尤其是关于"x2"参数。

它将每个字节转换为十六进制表示(两个字符(,然后将所有这些字符连接成一个字符串。请参阅标准数字格式字符串中的十六进制("X"(格式说明符。

private string ByteToString(byte[] data)
{
    return String.Concat(data.Select(b => b.ToString("x2")));
}

"x2">参数应用于字节的类函数ToString((,应用于每个实例,要求输出2(2(,十六进制

这就是select查询下面的内容,它采用字节的字符串表示,并将所有字节连接到结果字符串中,作为函数调用的返回参数。

我回答了你的问题吗?

我认为使用LINQ查询没有任何问题。