2013-01-18 12 views
9

io uso il seguente codice per leggere le informazioni BigEndian utilizzando BinaryReader, ma non sono sicuro se è il modo efficace di farlo. C'è una soluzione migliore?modo efficiente per leggere i dati big endian in C#

Qui è il mio codice:

// 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); 

risposta

12

BitConverter.ToInt32 non è molto veloce, in primo luogo. Vorrei semplicemente usare

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

Si potrebbe anche considerare di leggere più di 4 byte alla volta.

+0

grazie E 'molto interessante, ma per essere sicuri che ho avuto modo corretto l'idea, si può spiegare come si può leggere più di 4 byte. –

+1

Basta chiamare 'ReadBytes' con una lunghezza più grande, e quindi utilizzare diversi' i's di leggere interi in posizioni diverse nella matrice. Ma questa è un'ottimizzazione da prendere solo dopo il benchmarking. – CodesInChaos

+0

molto bello. grazie –

Problemi correlati