如何将字节[]转换为字符串?每次我尝试,我都

系统。Byte []

而不是数值。

另外,我如何得到十六进制而不是小数的值?


当前回答

正如其他人所说,这取决于字节数组中值的编码方式。尽管如此,您还是需要非常小心地处理这类事情,否则您可能会尝试转换未被所选编码处理的字节。

Jon Skeet有一篇关于。net中的编码和unicode的好文章。推荐阅读。

其他回答

这里没人提到你为什么会有"系统"字节[]"字符串,而不是值,所以我将。

当一个对象隐式转换为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()的值。

你必须知道以字节表示的字符串的编码,但是你可以说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 = 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

我想我应该给出一个答案。从我的测试来看,这种方法是最快的

public static class Helper
{
    public static string[] HexTbl = Enumerable.Range(0, 256).Select(v => v.ToString("X2")).ToArray();
    public static string ToHex(this IEnumerable<byte> array)
    {
        StringBuilder s = new StringBuilder();
        foreach (var v in array)
            s.Append(HexTbl[v]);
        return s.ToString();
    }
    public static string ToHex(this byte[] array)
    {
        StringBuilder s = new StringBuilder(array.Length*2);
        foreach (var v in array)
            s.Append(HexTbl[v]);
        return s.ToString();
    }
}