在你的例子中,这是不可能的,因为你无法判断一个字符串的结束位置和下一个位置的起始位置。这将有可能通过使用分隔符(字符\ 0通常用于表示一个字符串的结尾):
var stringList = System.Text.Encoding.UTF8.GetString(byteArr, 0, byteArr.Length).Split('\0');
:
List<String> stringlist = new List<String>();
stringlist.Add("Oye Oye");
stringlist.Add("Hello hello");
byte[] byteArr = stringlist.SelectMany(s => System.Text.Encoding.UTF8.GetBytes(s + '\0').ToArray();
然后,您可以通过使用Split
方法来检索列表
但总体而言,我不认为这是一个好主意。根据你需要什么,我宁愿建议使用DataContractSerializer
你的数组转换为字节:
var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(List<string>));
byte[] byteArr;
using (var ms = new System.IO.MemoryStream())
{
serializer.WriteObject(ms, stringlist);
byteArr = ms.ToArray();
}
而且将其转换回:
using (var ms = new System.IO.MemoryStream(byteArr))
{
stringlist = (Sserializer.ReadObject(ms);
}
我不认为这是可能的,因为其中一个字符串结束和另一个开始你丢失的信息。 – MarcinJuraszek 2013-03-20 06:56:42