簡體   English   中英

從字節數組轉換為列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM