2011-12-17 98 views
5

我有一個列表,我轉換成一個byte []像這樣:C#字節[]返回列表<int>

List<int> integerList = new List<int>(); 

integerList.Add(1); 
integerList.Add(2); 
integerList.Add(3); 

byte[] bytes = integerList.SelectMany(BitConverter.GetBytes).ToArray(); 

如何轉換這回列表?

回答

15

之一許多方法可以做到這一點(LINQ的一個):

var originalList = Enumerable.Range(0, bytes.Length/4) 
          .Select(i => BitConverter.ToInt32(bytes, i * 4)) 
          .ToList(); 

次要更新:

你也可以寫一個方便的通用版本(以防萬一你需要工作K的其他類型):

static List<T> ToListOf<T>(byte[] array, Func<byte[], int, T> bitConverter) 
{ 
    var size = Marshal.SizeOf(typeof(T)); 
    return Enumerable.Range(0, array.Length/size) 
        .Select(i => bitConverter(array, i * size)) 
        .ToList(); 
} 

用法:

var originalList = ToListOf<int>(bytes, BitConverter.ToInt32); 
1
byte[] is an IEnumerable; LINQ's ToList() extension method should do it. 

編輯:如果你想INT的列表:

bytes.Select((b) => (int)b).toList(); 
+0

這將產生一個字節列表,是否正確? – 2011-12-17 06:18:52

+0

是的;這不是你要問的嗎? – Melllvar 2011-12-17 06:23:34