如何将byte []转换为{#,#,#}格式的字符串?

时间:2013-07-12 18:17:18

标签: c# string bytearray

我有一个辅助函数,它将创建一个用于加密方法的键或向量字节数组。但是我需要一个方法,它将取byte[]并从字节数组中输出值string的以下表示形式:

//I need the output to look like this:
    "{241, 253, 159, 1, 153, 77, 115, 174, 234, 157, 77, 23, 34, 14, 19, 182, 65, 94, 71, 166, 86, 84, 50, 15, 133, 175, 8, 162, 248, 251, 38, 161}"

我发现这个使用技术上工作的长手法但它很乱,特别是必须删除最后一个逗号:

public static string ByteArrayToString(byte[] byteArray)
{
    var hex = new StringBuilder(byteArray.Length * 2);
    foreach (var b in byteArray)
        hex.AppendFormat("{0}, ", b);

    var output =  "{"+ hex.ToString() + "}";
    return output.Remove(output.Length - 3, 2); //yuck
}

这似乎是一个非常受欢迎的问题,我发现了几个解决方案的帖子,但没有一个建议从我byte[]输出字符串,如上所述。我检查了以下内容:

byte[] to hex string
How do you convert Byte Array to Hexadecimal String, and vice versa?

我使用了几个解析和LINQ示例,但是没有一个像我上面那样输出字符串中的字节数组元素。

有没有办法将我的helpwer方法返回的字节数组的实际值转换为我需要的字符串格式而不使用方法的黑客攻击?

1 个答案:

答案 0 :(得分:4)

非常方便的string.Join是你想要的关键。

public static string ByteArrayToString(byte[] byteArray)
{
    return "{" + string.Join(", ", byteArray) + "}";
}

如果您要对计算机进行编码,而不是为人类打印,base64可能是编码这些字节的更好方法。它允许更紧凑的编码。例如。这段代码:

public static string ByteArrayToString(byte[] byteArray)
{
    return Convert.ToBase64String(byteArray);
}

生成44个字符8f2fAZlNc67qnU0XIg4TtkFeR6ZWVDIPha8Iovj7JqE=,而不是您为编码这32个字节所提供的142个字符的字符串。转换回byte[]只是Convert.FromBase64String(theString),而不必自己拆分和解析长字符串。

更新:以下是紧凑代码生成的选项:

public static string ByteArrayEncoded(byte[] byteArray)
{
    return "Convert.FromBase64String(\""+Convert.ToBase64String(byteArray)+"\")";
}

使用类似:

string generatedLine = "private static readonly byte[] defaultVector = "
                         + ByteArrayEncoded(myArray) + ";";