如何将字节[]转换为字符串?每次我尝试,我都
系统。Byte []
而不是数值。
另外,我如何得到十六进制而不是小数的值?
如何将字节[]转换为字符串?每次我尝试,我都
系统。Byte []
而不是数值。
另外,我如何得到十六进制而不是小数的值?
当前回答
用LINQ做这件事的好方法…
var data = new byte[] { 1, 2, 4, 8, 16, 32 };
var hexString = data.Aggregate(new StringBuilder(),
(sb,v)=>sb.Append(v.ToString("X2"))
).ToString();
其他回答
十六进制,Linq-fu:
string.Concat(ba.Select(b => b.ToString("X2")).ToArray())
与时俱进
正如@RubenBartelink所指出的,没有将IEnumerable<string>转换为数组的代码:ba。Select(b => b. tostring ("X2"))在4.0之前不工作,相同的代码现在在4.0上工作。
这段代码…
byte[] ba = { 1, 2, 4, 8, 16, 32 };
string s = string.Concat(ba.Select(b => b.ToString("X2")));
string t = string.Concat(ba.Select(b => b.ToString("X2")).ToArray());
Console.WriteLine (s);
Console.WriteLine (t);
...在。net 4.0之前,输出是:
System.Linq.Enumerable+<CreateSelectIterator>c__Iterator10`2[System.Byte,System.String]
010204081020
在。net 4.0以后,字符串。Concat有一个接受IEnumerable的重载。因此,在4.0版本中,上述代码对于变量s和t将有相同的输出
010204081020
010204081020
4.0之前,ba。Select(b => b.ToString("X2"))将重载(对象arg0), IEnumerable<string>进入适当重载的方式,即(params string[] values),是我们需要将IEnumerable<string>转换为字符串数组。4.0之前,字符串。Concat有10个过载功能,在4.0现在是12个
private static string GuidToRaw(Guid guid)
{
byte[] bytes = guid.ToByteArray();
int сharCount = bytes.Length * 2;
char[] chars = new char[сharCount];
int index = 0;
for (int i = 0; i < сharCount; i += 2)
{
byte b = bytes[index++];
chars[i] = GetHexValue((int)(b / 16));
chars[i + 1] = GetHexValue((int)(b % 16));
}
return new string(chars, 0, chars.Length);
}
private static char GetHexValue(int i)
{
return (char)(i < 10 ? i + 48 : i + 55);
}
你必须知道以字节表示的字符串的编码,但是你可以说System.Text.UTF8Encoding.GetString(字节)或System.Text.ASCIIEncoding.GetString(字节)。(我是根据记忆做的,所以API可能不完全正确,但它非常接近。)
第二个问题的答案,请看这个问题。
我不经常把字节转换成十六进制所以我不知道有没有更好的方法,但这里有一种方法。
StringBuilder sb = new StringBuilder();
foreach (byte b in myByteArray)
sb.Append(b.ToString("X2"));
string hexString = sb.ToString();
有一个内置的方法:
byte[] data = { 1, 2, 4, 8, 16, 32 };
string hex = BitConverter.ToString(data);
结果:01-02-04-08-10-20
如果你想要没有破折号,只需删除它们:
string hex = BitConverter.ToString(data).Replace("-", string.Empty);
结果:010204081020
如果你想要一个更紧凑的表示,你可以使用Base64:
string base64 = Convert.ToBase64String(data);
结果:AQIECBAg