我正在使用这段代码将 List 转换为字节数组,但我想再次将此数据转换为 List 怎么可能。
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)).ToArray();
我正在使用这段代码将 List 转换为字节数组,但我想再次将此数据转换为 List 怎么可能。
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)).ToArray();
在您的示例中,这是不可能的,因为您无法判断字符串在哪里结束以及下一个字符串从哪里开始。可以使用分隔符(字符 \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
方法检索您的列表:
var stringList = System.Text.Encoding.UTF8.GetString(byteArr, 0, byteArr.Length).Split('\0');
但总的来说,我认为这不是一个好主意。根据您的需要,我宁愿建议使用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);
}