[英]Convert from Byte array to a List
我正在將List<string>
轉換為字節數組,如下所示:
Byte[] bArray = userList
.SelectMany(s => System.Text.Encoding.ASCII.GetByte(s))
.ToArray();
如何將其轉換回List<string>
? 我嘗試在上面的代碼中使用ASCII.GetString(s)
,但GetString
期望使用byte[]
而不是單個字節。
無法逆轉您的算法。
如果您考慮有兩個名為“ ab”和“ c”的用戶時會發生什么,則可以看到問題。 這將提供與您有兩個名為“ a”和“ bc”的用戶完全相同的字節。 用您的方法無法區分這兩種情況。
除了發明自己的序列化格式外,您還可以僅構建.NET框架中內置的序列化 ,例如BinaryFormatter
。
附帶說明一下,如果保留零字節字符串終止,則可以輕松地連接字符串並提取所有信息,例如
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;
}
您需要在字符串之間插入一個分隔符,以便可以將大字節數組拆分回原始用戶。 分隔符應該是不能作為用戶名一部分的字符。
示例(假設|
不能是用戶名的一部分):
var bytes = System.Text.Encoding.ASCII.GetByte(string.Join("|", userList.ToArray()));
您無法執行此操作,因為SelectMany
方法中丟失了數組結構的分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.