2011-12-17 13 views
5

Ho una lista che sto conversione in un byte [] in questo modo:C# byte [] torna alla lista <int>

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

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

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

Come faccio a convertire questo nuovo ad un elenco?

risposta

15

Uno dei tanti modi per farlo (un LINQ uno):

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

Minor update:

È anche possibile scrivere una comoda versione generica di questo (nel caso in cui sia necessario k con altri tipi):

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

utilizzati:

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

Ottima risposta. Il problema è che la dimensione int Nate sta tentando di analizzare non è costantemente 4 byte. –

+1

Risposta aggiornata: aggiunta la versione generica che funziona con qualsiasi tipo – max

+0

Bravo. Ti rinnegherei di nuovo se potessi. –

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

EDIT: Se si desidera una lista di int di:

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

che produrrebbe un elenco di byte, corretta? –

+0

Sì; non è quello che stai chiedendo? – Melllvar

+0

Sì, questo produce solo un elenco di byte, appena testato. – Nate

Problemi correlati