将字节数组转换为字节字符串

时间:2016-11-08 21:48:28

标签: c#

byte[] val = { 3, 4, 5 };

Dictionary<String, Object> dict = new Dictionary<String, Object>();
dict.Add("val", val);
//...

string request_json = new JavaScriptSerializer().Serialize(dict);
Console.Out.WriteLine(request_json);

这会产生

{"val":[3,4,5]}

转换val的最佳方法是什么,以便上面产生以下(或等效的):

{"val":"\u0003\u0004\u0005"}

(这被传递给一个Web服务,它需要一个任意字节的字符串而不是任意字节的数组。)

如果有帮助,我会在Perl中使用以下内容:

pack "C*", @bytes

更具描述性的Perl解决方案是:

join "", map { chr($_) } @bytes

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

dict.Add("val", String.Join("", val.Select(_ => (char)_)));

或迈克尔建议:

dict.Add("val", String.Concat(val.Select(_ => (char)_)));

答案 1 :(得分:1)

一种可能的解决方案:

StringBuilder sb = new StringBuilder(val.Length);
foreach (byte b in val) {
    sb.Append((char)b);
}

dict.Add("val", sb.ToString());

注意:可以使用Convert.ToChar(b)代替(char)b