2

実際には uint 形式のストリームにデータがあります。System.IO.Stream では、コンテンツをバイト配列に読み取ることしかできませんが、バイトを読み取ってからバイト配列の長さの 1/4 の uint 配列に変換したくありません。時間を節約するために、uint 配列のメモリに直接読み込みたいと思います。

アンマネージ C++ の場合は、とても簡単です。ポインターを uint 配列に送信するだけで完了します。しかし、C# ではそれほど単純ではないようです。別の uint 配列と同じメモリ アドレスを持つバイト配列を生成し、そのバイト配列を Stream.Read() のパラメーターとして送信して、Stream.Read() がバイト配列に書き込むときにコンテンツがちょうどuint配列でも。しかし、私は Marshall クラスを調べましたが、これまでのところ、この問題の解決策は見つかりませんでした。何か案は?

4

1 に答える 1

3
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プロパティをサポートしていないことに注意してください。

于 2010-01-13T10:12:41.583 に答える