Как прочитать управляемый поток в массив Uint непосредственно в C #? - PullRequest
2 голосов
/ 13 января 2010

У меня есть некоторые данные в потоке, который на самом деле в формате uint. System.IO.Stream позволяет только считывать содержимое в байтовый массив, но я не хочу читать байты, а затем преобразовывать их в массив uint с 1/4 длины байтового массива. Я хочу прочитать его прямо в память массива uint, чтобы сэкономить время.

Если это неуправляемый C ++, это так просто. Просто отправьте указатель на массив uint, и все будет сделано. Но в C # это не так просто. Я пытаюсь создать байтовый массив с тем же адресом памяти, что и другой массив uint, а затем отправить байтовый массив в качестве параметра Stream.Read (), чтобы при записи Stream.Read () в байтовый массив содержимое в массиве uint. Но я посмотрел на класс Маршалла и до сих пор не нашел решения этой проблемы. Есть идеи?

1 Ответ

3 голосов
/ 13 января 2010
List<UInt32> array = new List<UInt32>();
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
while(stream.Position < stream.Length)
   array.Add(reader.ReadUInt32());

Обратите внимание, что некоторые реализации потоков не поддерживают свойства Position и / или Length.

...