c#byte []→string→byte []问题

时间:2015-09-09 15:55:00

标签: c# arrays string unicode

我的另一个奇怪的问题。

我有这段代码:

byte[] chks = Get64bitData();
string str = Encoding.UTF8.GetString(chks);
byte[] bts = Encoding.UTF8.GetBytes(str); 

方法Get64bitData返回 8 个字节数组,然后数组转换为字符串。 然后代码再次将字符串转换为字节数组,但是新数组现在具有 16 字节!

这是什么类型的地狱,以及如何避免它?

1 个答案:

答案 0 :(得分:3)

如您所见,任何随机字节[]都无法安全地转换为文本。使用 Convert.ToBase64String BitConverter.ToString 将字节数组转换为字符串。

byte[] chks = Get64bitData();
string str = Convert.ToBase64String(chks);
byte[] bts = Convert.FromBase64String(str);

或在 System.Runtime.Remoting.Metadata.W3cXsd2001

中使用 SoapHexBinary
byte[] chks = Get64bitData();
string str = new SoapHexBinary(chks).ToString();
byte[] bts = SoapHexBinary.Parse(str).Value;