2010-07-02 10 views
23

Ho alcune domande su endian-ness che sono legati basta che io li Warrant mettendo come una domanda:Dettagli su Endian-ness e .Net?

1) è endian-ness hanno deciso per .Net o dall'hardware?

2) Se è deciso dall'hardware, come posso capire che endian l'hardware è in C#?

3) L'endianità influisce sulle interazioni binarie quali OR, AND, XOR o turni? OSSIA Cambierà una volta a destra spostando sempre il bit meno significativo?

4) Ne dubito, ma c'è una differenza di endianità da diverse versioni del framework .Net? Presumo che siano tutti uguali, ma ho imparato a smettere di assumere alcuni dei dettagli di livello inferiore come questo.

Se necessario, posso chiedere a questi come domande diverse, ma immagino che chiunque conosca la risposta a uno di questi probabilmente conosce la risposta a tutti (o può indicarmi una buona direzione).

risposta

26

1) L'hardware.

2) BitConverter.IsLittleEndian

3) Endianness non influisce operazioni bit per bit. Lo spostamento a destra sta cambiando nella direzione del bit meno significativo. UPDATE dal commento di Oops: Tuttavia, endianness influisce sull'input e sull'output binari. Durante la lettura o la scrittura di valori superiori a un byte (ad esempio, leggendo un BinaryReader o utilizzando BitConverter), è necessario tenere conto di endianness. Una volta che i valori vengono letti correttamente, tutte le operazioni bit a bit funzionano normalmente.

4) La maggior parte delle versioni di .NET sono little endian. Notevoli eccezioni includono XBox e alcune piattaforme supportate da Mono o Compact Framework.

+2

non sono sicuro 4 # è del tutto corretto. Ad esempio, il .Net Framework compatto viene eseguito su molti dispositivi, presumo che alcuni di essi siano big-endian. E Mono (anche se non .Net, ma un'implementazione CLR valida) funziona certamente su piattaforme big-endian. Penso che Corey si stesse chiedendo se la endianità differisce con le versioni incrementali di .Net (ad esempio, 1.0 .. 4.0) - la risposta è no - dipende solo dall'hardware. –

+2

Seguirò @Mark H comment. L'endianness è deciso dall'hardware e .Net utilizzerà semplicemente qualunque cosa sia. Tuttavia, non ci sono lezioni inLa rete si baserà su una particolare endianità (o almeno nessuna classe non dovrebbe :-)), quindi nella migliore delle ipotesi si può dire che è agnostico, non che ha una particolare endianità. –

+0

@Mark: ho aggiornato la risposta per riflettere Mono/CF. Credo che l'unica piattaforma BE CF sia XBox. –

0

1) né né ... o si può dire sia
è stato deciso dagli sviluppatori di hardware. E devi decidere a riguardo se scrivi software che legge/scrive determinati formati di file senza usare librerie esterne.
Non c'è nessun problema con ordine dei byte Se si legge da un file
* un byte
ma bisogna decidere come interpretare in piccola o grande formato endian se avete letto tutti gli altri tipi di dati primitivi come
* interi ,
* stringhe,
* galleggianti.
L'hardware non aiuta qui. Il BitConverter non aiuta qui. Solo la documentazione del formato di file potrebbe aiutare e testare il codice naturalmente ...
edit: trovato pubblicità buona spiegazione qui: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/