C# 从字节数组转换为列表
我将列表转换为字节数组,如下所示:C# 从字节数组转换为列表,c#,arrays,list,byte,C#,Arrays,List,Byte,我将列表转换为字节数组,如下所示: Byte[] bArray = userList .SelectMany(s => System.Text.Encoding.ASCII.GetByte(s)) .ToArray(); 如何将其转换回列表?我尝试在上面的代码中使用ASCII.GetStrings,但GetString需要一个字节[],而不是一个字节。无法反转您的算法 如果你考虑当你有两个用户叫做AB和C时会发生什么问题。这
Byte[] bArray = userList
.SelectMany(s => System.Text.Encoding.ASCII.GetByte(s))
.ToArray();
如何将其转换回列表?我尝试在上面的代码中使用ASCII.GetStrings,但GetString需要一个字节[],而不是一个字节。无法反转您的算法 如果你考虑当你有两个用户叫做AB和C时会发生什么问题。这将给出完全相同的字节,就像您有两个名为a和bc的用户一样。用你的方法无法区分这两种情况
与发明自己的序列化格式不同,您可以只使用.NET framework中内置的格式,例如。您需要在字符串之间插入一个delimter,以便将大字节数组拆分回原始用户。分隔符应为不能作为用户名一部分的字符 假设|不能是用户名的一部分的示例:
var bytes = System.Text.Encoding.ASCII.GetByte(string.Join("|", userList.ToArray()));
由于SelectMany方法中丢失了数组结构的分隔符,因此无法执行此操作。作为旁注,如果保留零字节字符串终止,则可以轻松地连接字符串并提取所有信息,例如
Byte[] bArray = userList
.SelectMany(s => System.Text.Encoding.ASCII.GetBytes(s + '\0')) // Add 0 byte
.ToArray();
List<string> names = new List<string>();
for (int i = 0; i < bArray.Length; i++)
{
int end = i;
while (bArray[end] != 0) // Scan for zero byte
end++;
var length = end - i;
var word = new byte[length];
Array.Copy(bArray, i, word, 0, length);
names.Add(ASCIIEncoding.ASCII.GetString(word));
i += length;
}
您需要某种方法将大字节流拆分为多个字符串。类似于bArray.ToList?或者您的原始列表中有多个字符串?原始列表中有多个字符串,但我不确定如何拆分它。或者,是否有更好的方法将字符串列表转换为字节数组或流或从字节数组或流转换为字符串列表?为什么要再次执行此操作?@Skoder,是否有更好的方法将字符串列表转换为字节数组或流或从字节数组或流转换为字符串列表?是的,这称为序列化谢谢,我将使用序列化程序。由于我有上面的代码,我想我可能错过了一些简单的东西,以便逆转这个过程。几分钟后我会接受你的回答。