2013-01-18 6 views
9

私はBinaryReaderを使用してBigEndian情報を読み込みますが、それが効率的な方法であるかどうかはわかりません。もっと良い解決策はありますか?C#のビッグエンディアンデータを効率的に読む方法

は、ここに私のコードです:

// some code to initialize the stream value 
// set the length value to the Int32 size 
BinaryReader reader =new BinaryReader(stream); 
byte[] bytes = reader.ReadBytes(length); 
Array.Reverse(bytes); 
int result = System.BitConverter.ToInt32(temp, 0); 

答えて

12

BitConverter.ToInt32は、最初はあまり速くありません。私は単純に使用します

public static int ToInt32BigEndian(byte[] buf, int i) 
{ 
    return (buf[i]<<24) | (buf[i+1]<<16) | (buf[i+2]<<8) | buf[i+3]; 
} 

また、一度に4バイト以上を読むことも考えられます。

+0

ありがとう非常に興味深いですが、アイデアが正しく得られたことを確認するには、4バイトを超える読み込み方法を説明できますか。 –

+1

より長い長さの 'ReadBytes'を呼び出し、配列の異なる位置にある整数を読み出すために異なる' i'を使います。しかし、これはベンチマークの後に行うべき最適化です。 – CodesInChaos

+0

非常にいいです。ありがとう –

1

あなたはIPAddress.NetworkToHostOrderを使用することができますが、それは実際にはより効率的だ場合、私は考えています。それをプロファイルする必要があります。

関連する問題