有没有一种方法可以调整这个函数,使它不会;不要使用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",那么您可以将其滚动到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查询没有任何问题。