Преобразование Int16 в UByte [] не работает в C# с BitConverter.GetBytes () - PullRequest
0 голосов
/ 29 апреля 2020

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

Console.WriteLine(BitConverter.GetBytes(0x010D)[0]);
Console.WriteLine(BitConverter.GetBytes(0x010D)[1]);

И в консоли он печатает:

13
1

Я запутался, потому что это означает, что массив [13, 1]. Я бы предположил, что он должен go слева направо, как и оригинальное число. Есть ли способ исправить это, или мне просто нужно всегда относиться к этому, как к другому?

Большое спасибо!

PS Извинения, если это глупо, я просто могу ' Похоже, что-то не удалось найти с моей проблемой, которая может быть из-за ошибки пользователя.

1 Ответ

1 голос
/ 29 апреля 2020

Я решил ответить на этот вопрос, потому что Джон Скит прокомментировал соответствующий ответ.

Решение этого вопроса действительно довольно простое, и это была просто причуда работы с байтами и двоичными файлами, о которых я не знал.

См .:
Порядковый номер Статья в Википедии
Документы GetBytes

Порядковый номер - это порядок байтов в числе go in. В моем случае с. NET числа little-endian, что означает, что сначала идут меньшие числа, а затем большие числа. Для примера вопроса 0x010D будет представлен как { 0x0D, 0x01 } в порядке с прямым порядком байтов. Однако, если он будет представлен в формате с прямым порядком байтов, он будет представлен как { 0x01, 0x0D }

Еще раз спасибо Джону Скиту за ваш полезный комментарий!

...