2016-04-19 5 views
4

Какой самый быстрый способ копирования bit сек от Int к byte array, в C#?Лучший способ скопировать биты с точки зрения производительности, в C#

У меня есть несколько int с и мне нужно скопировать (иногда все и Somtimes некоторые) bit s последовательно в byte[] ...

мне нужен процесс, чтобы быть как можно более эффективным (например, избегайте создания нового byte array в процессе, как я понимаю, BitConverter и т. д.).

+1

В чем проблема с созданием нового массива байтов? Вы измеряли и проверяли, что это значительная проблема с производительностью, или вы решаете проблему, которая может не существовать? Вы уже пробовали еще один метод? Каковы результаты? –

+1

@DStanley Особенно учитывая то, что мы говорим о копировании битов, что в первую очередь предложило бы новый массив байтов ... – Kateract

+1

Вы всегда можете получить байты компонента «вручную»: 'var b0 = val var b1 = (val >> 8) &0xff; var b2 = (val >> 16) &0xff; var b3 = (val >> 24) &0xff; 'и делать то, что вы хотите с ними. – spender

ответ

3

Один из способов избежать создания нового byte[] массива при каждом вызове, чтобы создать BinaryWriter на вершине MemoryStream, напишите ваш целые в него, а затем собрать все результаты сразу при обращении буфера MemoryStream «s:

var buf = new byte[400]; 
using (var ms = new MemoryStream(buf)) 
using (var bw = new BinaryWriter(ms)) { 
    for (int i = 0 ; i != 100 ; i++) { 
     bw.Write(2*i+3); 
    } 
} 
// At this point buf contains the bytes of 100 ints 
+0

См. [Это] (http://ideone.com/j1sQcN) для демонстрации. – dasblinkenlight

+1

Из-за интерфейса потока, ему нужно было бы создать по крайней мере один массив байтов в качестве буфера –

+0

@ MagikM18 Не могли бы вы уточнить это? Я передаю буфер 'buf' в' MemoryStream', и я могу продолжать использовать один и тот же поток или тот же буфер. – dasblinkenlight

Смежные вопросы