1

我有一个辅助函数,它将创建一个密钥或向量字节数组以用于加密方法。但是,我需要一种方法,该方法将从字节数组中获取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[] 到十六进制字符串
你如何将字节数组转换为十六进制字符串,反之亦然?

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

有没有一种方法可以将我的辅助方法返回的字节数组的实际值转换为我需要的字符串格式,而无需使用该方法的破解?

4

1 回答 1

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 个字符的字符串。并且转换回 a byte[]is just Convert.FromBase64String(theString),而不必自己拆分和解析长字符串。

更新:这是紧凑代码生成的一个选项:

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

像这样使用:

string generatedLine = "private static readonly byte[] defaultVector = "
                         + ByteArrayEncoded(myArray) + ";";
于 2013-07-12T18:19:10.527 回答