2011-12-17 97 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