有没有办法可以改变这个函数,它将字节数组转换为字符串,所以它不使用LINQ? (使其与以前的.NET版本兼容)?
private string ByteToString(byte[] data)
{
return String.Concat(data.Select(b => b.ToString("x2")));
}
网上发现的大多数方法似乎都返回了一个不可打印的unicode字符串。上面的代码返回一个安全的字符串(例如b8b30dcfcac41ebd5313107adf7054024fb1ac69而不是高位ASCII字符的加载)但是我真的不明白上面的函数在做什么(特别是关于“x2”参数。
答案 0 :(得分:3)
当然,如果您只想将代码设置为“非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代码的相当直译。
答案 1 :(得分:0)
private string ByteToString(byte[] data)
{
return BitConverter.ToString(data).Replace("-", "").ToLowerInvariant();
}
顺便说一下,当你使用{2}时,你可以使用Linq到对象,感谢LinqBridge(你当然还需要VS2008)
答案 2 :(得分:0)
这就是你要找的东西:
string s = System.Text.Encoding.UTF8.GetString(bytes);
反过来说:
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
答案 3 :(得分:0)
首先,您只需将字节转换为更有用的字符,例如UTF8,然后您就可以从中获取字符串。 像(在我的情况下:iso-8859-1):
buf = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, buf);
tempString = Encoding.UTF8.GetString(buf, 0, count);
答案 4 :(得分:0)
有没有办法可以改变这个将字节数组转换为的函数 一个字符串,所以它不使用LINQ? (使其与先前的兼容 .NET版本)?
假设你仍然可以使用C#3或更高版本,你可以这样做:
return string.Concat(Array.ConvertAll(data, b => b.ToString("x2")));
但是我真的不明白上面的功能在做什么 (特别是关于“x2”参数。
它将每个字节转换为十六进制表示(两个字符),然后将所有这些字符连接成一个字符串。请参阅Standard Numeric Format Strings中的十六进制(“X”)格式说明符。
答案 5 :(得分:-1)
private string ByteToString(byte[] data)
{
return String.Concat(data.Select(b => b.ToString("x2")));
}
“x2”参数应用于 byte 的类函数 ToString(),适用于每个实例,需要输出< strong> 2 (2),十六进制(x),小写字符。
这就是select查询下面的内容,它接受字节的字符串表示,并将所有字符串连接到结果字符串作为函数调用的返回参数。
我是否回答了你的问题?
我认为使用LINQ查询没有任何问题。