2011-12-17 35 views
5

tôi có một danh sách mà tôi đang chuyển đổi sang một byte [] như vậy:C# byte [] trở lại vào danh sách <int>

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

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

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

Làm thế nào để chuyển đổi trở lại này để một danh sách?

Trả lời

15

Một trong nhiều cách để làm điều đó (một LINQ một):

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

cập nhật nhỏ:

Bạn cũng có thể viết một phiên bản chung hữu ích về điều này (chỉ trong trường hợp bạn sẽ cần phải lo lắng k với các loại khác):

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(); 
} 

Cách sử dụng:

var originalList = ToListOf<int>(bytes, BitConverter.ToInt32); 
+0

Câu trả lời hay. Vấn đề là kích thước int mà Nate đang cố gắng phân tích không nhất quán là 4 byte. –

+1

Cập nhật câu trả lời: thêm phiên bản chung mà sẽ làm việc với bất kỳ loại – max

+0

Bravo. Tôi sẽ upvote bạn một lần nữa nếu tôi có thể. –

1
byte[] is an IEnumerable; LINQ's ToList() extension method should do it. 

EDIT: Nếu bạn muốn có một danh sách các int của:

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

Điều đó sẽ tạo ra một danh sách của byte, có đúng không? –

+0

Có; đó không phải là những gì bạn đang yêu cầu? – Melllvar

+0

Có, chỉ cần tạo ra một danh sách các byte, chỉ cần kiểm tra nó. – Nate

Các vấn đề liên quan