У меня есть несколько вопросов о порядке байтов, которые связаны достаточно, что я гарантирую вставление их как один вопрос:
1) Порядок байтов решен .NET или аппаратными средствами?
2) Если решено аппаратными средствами, как я могу выяснить, какой порядок байтов аппаратные средства находятся в C#?
3) Порядок байтов влияет на двоичные взаимодействия, такие как ORs, ANDs, XORs или сдвиги? Т.Е. смещение будет однажды направо всегда откладывать младший значащий бит?
4) Я сомневаюсь относительно этого, но есть ли различие в порядке байтов от различных версий платформы .NET? Я предполагаю, что они являются всеми одинаковыми, но я учился прекращать принимать о некоторых более низких деталях уровня, таких как это.
Если потребуется, я могу задать их как различные вопросы, но я изображаю кого-либо, кто знает, что ответ на один из них, вероятно, знает ответ всем им (или может указать на меня в хорошем направлении).
1) Аппаратное обеспечение.
2) BitConverter.IsLittleEndian
3) Порядок байтов не влияет на побитовые операции. Сдвиг вправо - это сдвиг в направлении наименее значимого бита. ОБНОВЛЕНИЕ из комментария Упс: Однако порядок байтов влияет на двоичный ввод и вывод. При чтении или записи значений размером более одного байта (например, при чтении int
из BinaryReader
или при использовании BitConverter
) необходимо учитывать порядок байтов. После того, как значения считаны правильно, все побитовые операции работают как обычно.
4) Большинство версий .NET имеют обратный порядок байтов. Известные исключения включают XBox и некоторые платформы, поддерживаемые Mono или Compact Framework.
1) ни или ... или вы можете сказать либо
это решили разработчики оборудования. И вы должны решить об этом, если вы пишете программное обеспечение, которое читает / записывает определенные форматы файлов без использования внешних библиотек.
Нет проблем с порядком байтов, если вы читаете из файла
* байт
но вам нужно решить, как интерпретировать его в формате с прямым или обратным порядком байтов
если вы читаете все другие примитивные типы данных, такие как
* целые числа,
* строки,
* плавает.
Аппаратное обеспечение тут не помогает. BitConverter здесь не помогает. Только документация по формату файла может помочь и, конечно же, проверка вашего кода ...
изменить: нашел здесь хорошее объяснение:
http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/