由于您使用的是BitConverter,因此您获得的字符串的格式特别不友好。要反转这个过程,您可以编写一个自定义方法来反序列化字节,如下所示:
public static byte[] GetBytes(string value)
{
return value.Split('-').Select(s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber)).ToArray();
}
或作为 Ben Voigt suggests:
public static byte[] GetBytes(string value)
{
return Array.ConvertAll(value.Split('-'), s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber));
}
...
var originalBytes = new byte[] { 1, 2, 3, 4, 5 };
var stValue = BitConverter.ToString(originalBytes); // "01-02-03-04-05"
var bytes = GetBytes(stValue); // [ 1, 2, 3, 4, 5 ]
但是,通常需要使用BitConverter。 Base64 是一种更紧凑、更高效的随机字节编码方式,您无需创建自定义解码器:
var originalBytes = new byte[] { 1, 2, 3, 4, 5 };
var stValue = Convert.ToBase64String(originalBytes); // "AQIDBAU="
var bytes = Convert.FromBase64String(stValue); // [ 1, 2, 3, 4, 5 ]
另一方面,Encoding 类提供了类似的在字符串和字节之间进行转换的功能。 虽然给定的编码可能无法将随机的字节序列转换为字符串,因此最好仅在您首先知道字符串有效时才使用此方法:
var originalValue = "Hello World";
var bytes = Encoding.UTF8.GetBytes(originalValue); // [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100 ]
var stValue = Encoding.UTF8.GetString(bytes); // "Hello World"