如何将字节[]转换为字符串?每次我尝试,我都
系统。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做这件事的好方法…
var data = new byte[] { 1, 2, 4, 8, 16, 32 };
var hexString = data.Aggregate(new StringBuilder(),
(sb,v)=>sb.Append(v.ToString("X2"))
).ToString();
这里没人提到你为什么会有"系统"字节[]"字符串,而不是值,所以我将。
当一个对象隐式转换为String类型时,程序将默认使用该对象的公共String ToString()方法,该方法从System继承而来。对象:
public virtual string ToString()
{
return this.GetType().ToString();
}
如果你发现你经常进行这种转换,你可以简单地创建一个包装器类,并像这样重写这个方法:
public override string ToString()
{
// do the processing here
// return the nicely formatted string
}
现在每次打印这个包装器对象时,你将得到你自己的值,而不是this. gettype (). tostring()的值。
正如其他人所说,这取决于字节数组中值的编码方式。尽管如此,您还是需要非常小心地处理这类事情,否则您可能会尝试转换未被所选编码处理的字节。
Jon Skeet有一篇关于。net中的编码和unicode的好文章。推荐阅读。
:
byte[] data = new byte[] { 0x01, 0x02, 0x03, 0x0D, 0x0E, 0x0F };
string hex = string.Empty;
data.ToList().ForEach(b => hex += b.ToString("x2"));
// use "X2" for uppercase hex letters
Console.WriteLine(hex);
结果:0102030 d0e0f
有一个内置的方法:
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