Какие .Net-совместимые архитектуры не имеют порядка байтов? - PullRequest
3 голосов
/ 10 сентября 2010

Класс BitConverter имеет поле IsLittleEndian , которое в соответствии с документацией:

Указывает порядок байтов («порядковый номер»), в котором данныехранится в этой компьютерной архитектуре.

Я замечаю в Reflector, что поле жестко запрограммировано в true в статическом конструкторе BitConverter.

Итак, мой вопрос, нужно ли мнеучитывать IsLittleEndian при использовании BitConverter - другими словами, есть ли реализации .Net, работающие на платформах с прямым порядком байтов?А если нет, то какова была цель поля в первую очередь?

Ответы [ 6 ]

3 голосов
/ 10 сентября 2010

Стандарт CLI не запрещает какой-либо конкретный Endianness, поэтому, если вы хотите, чтобы ваша программа была переносимой, вы должны не зависеть от конкретного порядка байтов ... если, конечно, в сценариях, где конкретный байттребуется упорядочение, например, с некоторыми протоколами обмена данными (спасибо пользователю The Moof за указание на это).

Из CLI Annotated Standard (с.161) - РазделI, раздел 12.6.3: «Порядок следования байтов»:

Для типов данных размером более 1 байта порядок байтов зависит от целевого ЦП.Код, который зависит от порядка следования байтов, может работать не на всех платформах.[...]

Я подозреваю, что вы видели жестко запрограммированное значение для IsLittleEndian в Reflector, потому что когда вы загружали / устанавливали .NET Framework на свой компьютер, именно эта установкапакет был нацелен на определенную платформу (например, Intel x86, которая является Little Endian).

Таким образом, я мог бы представить, что есть другие установочные пакеты .NET Framework, которые имеют IsLittleEndian, встроенный для возвратаразличное значение, в зависимости от платформы, к которой относится данная установка.

3 голосов
/ 10 сентября 2010

.Net Micro Framework 4.1 поддерживает порядок байтов - Источник

3 голосов
/ 10 сентября 2010

НЕКОТОРЫЕ из систем, на которых работает .NET Micro Framework , (или могут быть ...) с прямым порядком байтов. В версии 4.1 появилась поддержка архитектур с прямым порядком байтов .

Однако вы наверняка знаете, работаете ли вы на микро-фреймворке ...

2 голосов
/ 10 сентября 2010

Зависит от того, что вы подразумеваете под «реализациями .Net». Я не знаю версию Microsoft .NET Framework для платформы с прямым порядком байтов (но см. Другие ответы). Но если вы имеете в виду реализацию CLI / CLR, то и Mono и DotGNU имеют версии для машин с прямым порядком байтов. Mono работает как минимум на Solaris 10 на Sparc и на Mac OS X на PowerPC. DotGNU имеет гораздо более широкий список доступных платформ.

1 голос
/ 10 сентября 2010

Если вы MSIL, вы не получите эту гарантию.

Даже если это верно для всех существующих архитектур, у вас нет гарантии, что завтра я не перенесу .NET на Alpha или PDP11.

0 голосов
/ 01 октября 2010

XBox360 - BigEndian.У Роберта Уноки из Microsoft есть хорошая запись в блоге о важности проверки флага IsLittleEndian - и об ошибках, которые возникали при переносе CLR на XBox360, когда разработчики Microsoft не смогли этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...