Подробности о Endian-ности и .Net? - PullRequest
26 голосов
/ 02 июля 2010

У меня есть несколько вопросов о порядке байтов, которые достаточно взаимосвязаны, поэтому я рекомендую поместить их в один вопрос:

1) Порядковый номер решается .Net или аппаратным обеспечением?

2) Если это решено аппаратным обеспечением, как я могу выяснить, какой порядковый номер аппаратного в C #?

3) Влияет ли порядок байтов на двоичные взаимодействия, такие как OR, AND, XOR или сдвиги? И.Е. Будет ли сдвиг вправо всегда сдвигать младший бит?

4) Я сомневаюсь в этом, но есть ли разница в порядке байтов от разных версий .Net Framework? Я предполагаю, что они все одинаковы, но я научился перестать предполагать некоторые детали более низкого уровня, такие как эта.

При необходимости я могу задать их как разные вопросы, но я полагаю, что любой, кто знает ответ на один из них, вероятно, знает ответ на все из них (или может указать мне правильное направление).

Ответы [ 2 ]

30 голосов
/ 02 июля 2010

1) Аппаратное обеспечение.

2) BitConverter.IsLittleEndian

3) Порядковый номер не влияет на побитовые операции. Сдвиг вправо - это сдвиг в направлении младшего бита. ОБНОВЛЕНИЕ из комментария Oops: Однако, порядок байтов действительно влияет на двоичный ввод и вывод. При чтении или записи значений, превышающих байт (например, при чтении int из BinaryReader или использовании BitConverter), вы должны учитывать порядковый номер. Как только значения считаны правильно, все побитовые операции действуют как обычно.

4) Большинство версий .NET имеют порядок байтов. Заметные исключения включают XBox и некоторые платформы, поддерживаемые Mono или Compact Framework.

0 голосов
/ 02 июля 2010

1) ни, ни ... или вы можете сказать, либо
это было решено разработчиками оборудования.И вы должны принять решение об этом, если вы пишете программное обеспечение, которое читает / записывает определенные форматы файлов без использования внешних библиотек.
Нет проблем с endiannes Если вы читаете из файла
* байт
, но вам необходиморешить, как интерпретировать его в формате с прямым или младшим порядком байтов, если вы читаете все другие примитивные типы данных, такие как
* целые числа,
* строки,
* с плавающей точкой.
Аппаратное обеспечение здесь не помогает.BitConverter здесь не помогает.Только документация формата файла может помочь и проверить ваш код, конечно ...
редактировать: найти хорошее объяснение здесь: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

...