2010-07-02 7 views
23

Mam kilka pytań dotyczących endian-ności, które są na tyle na tyle powiązane, że gwarantuję umieszczenie ich w jednym pytaniu:Szczegóły dotyczące Endian-ness i .Net?

1) Czy endianizm jest określony przez .Net lub przez sprzęt?

2) Jeśli decyzja jest podejmowana przez sprzęt, jak mogę dowiedzieć się, który endian sprzęt jest w C#?

3) Czy endogeniczność wpływa na interakcje binarne, takie jak OR, ORAZ, XOR czy przesunięcia? TO ZNACZY. Czy przesunięcie raz w prawo zawsze przesunie najmniej znaczący fragment?

4) Wątpię w to, ale czy istnieje różnica w endian-ness z różnych wersji frameworka .Net? Zakładam, że są one takie same, ale nauczyłem się przestać przyjmować pewne szczegóły niższego poziomu, takie jak to.

W razie potrzeby mogę zadać je jako różne pytania, ale sądzę, że każdy, kto zna odpowiedź na którąś z nich, prawdopodobnie zna odpowiedź na wszystkie (lub może wskazać mi kierunek).

Odpowiedz

26

1) Sprzęt.

2) BitConverter.IsLittleEndian

3) nie wpływa na bajt operacji bitowej. Przesunięcie w prawo przesuwa się w najmniej znaczącym kierunku. UPDATE z komentarza Oops: Jednak endianness wpływa na wejście i wyjście binarne. Podczas odczytywania lub zapisywania wartości większych niż bajt (np. Odczytywanie int z BinaryReader lub przy użyciu BitConverter), należy uwzględnić endianię. Po prawidłowym wczytaniu wartości wszystkie operacje bitowe zachowują się normalnie.

4) Większość wersji .NET to mały endian. Godnymi uwagi wyjątkami są XBox i niektóre platformy obsługiwane przez Mono lub Compact Framework.

+2

nie jestem pewien # 4 jest całkowicie poprawne. Na przykład .Net Compact Framework działa na wielu urządzeniach, zakładam, że niektóre z nich są typu big-endian. A Mono (choć nie .Net, ale ważna implementacja CLR) z pewnością działa na platformach big-endian. Myślę, że Corey pytał, czy endianość różni się od inkrementalnych wersji .Net (np. 1.0 .. 4.0) - odpowiedź na to pytanie brzmi "nie" - zależy to tylko od sprzętu. –

+2

Będę drugi komentarz @ Mark H. O endianness decyduje sprzęt i .Net po prostu użyje tego, co jest. Jednak nie ma zajęć w.Sieć będzie polegać na konkretnej endianiczności (a przynajmniej żadna klasa nie powinna :-)), więc w najlepszym razie można powiedzieć, że jest agnostyczna, a nie, że ma szczególną endianię. –

+0

@ Mark: Zaktualizowałem odpowiedź, aby odzwierciedlić Mono/CF. Uważam, że jedyną platformą BE CF jest XBox. –

0

1) ani ani ... ani nie można powiedzieć, ani
zostało to postanowione przez producentów sprzętu. I musisz o tym zdecydować, jeśli piszesz oprogramowanie, które czyta/zapisuje określone formaty plików bez korzystania z zewnętrznych bibliotek.
Nie ma problemu z kolejność bajtów Jeśli czytać z pliku
* bajt
ale trzeba zdecydować, jak interpretować go w małym lub dużym formacie endian jeśli czytasz wszystkie inne prymitywne typy danych jak
* całkowitymi ,
* ciągi znaków,
* Pływa.
Sprzęt tutaj nie pomaga. BitConverter tu nie pomoże. Tylko dokumentacja formatu pliku może pomóc i testowanie kodu oczywiście ...
edit: Znaleziono ogłoszenie dobre wyjaśnienie tutaj: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

Powiązane problemy