2013-01-18 2 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을 사용할 수 있지만 실제로 더 효율적인지 나는 모른다. 프로파일 링해야합니다.