1

Из того, что я исследовал, Little Endian хранит младший значащий байт в наименьшем адресе памяти, в то время как Big Endian хранит наименьший значащий байт в наименьшем адресе памяти.

Тем не менее, я не понимаю, как рассчитать и сравнить значащие байты.

Например, с этого сайта изображение ниже показывает, как 4 байта, 90, AB, 12, CD хранятся в адресах памяти в формате Little Endian.

Little Endian

Как сравнить какой байт больше среди 4? Сначала я преобразовал все в шестнадцатеричные значения, а затем сравнил их десятичные значения, но, похоже, это не сработало.

205> 18, однако CD хранится в наименьшем адресе памяти .. так что .. Я не прав.

Любые разъяснения приветствуются.

Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.

1 ответ1

3

Я думаю, что веб-страница, на которую вы ссылаетесь, содержит очень запутанное описание порядка байтов!

Фактическое значение отдельных байтов в слове не имеет отношения к тому, где они хранятся в памяти, только их положение как часть целого 4-байтового слова.

Порядковый номер относится только к многобайтовым словам. В вашем случае у вас есть 4 байта слова следующим образом:

Decimal      Hex           Binary
2427130573   90 AB 12 CD   10010000 10101011 00010010 11001101

Это представление с прямым порядком байтов, где старший значащий байт (0x90) хранится первым в памяти или с самым низким адресом памяти.

В представлении с прямым порядком байтов байты просто обращаются в памяти следующим образом:

Decimal      Hex           Binary
2427130573   CD 12 AB 90   11001101 00010010 10101011 10010000

Теперь наименее значимый байт (0xCD) сохраняется первым в памяти или по младшему адресу памяти.

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

Концепция порядкового номера восходит к архитектуре процессора, как это описано в статье, на которую вы ссылаетесь, и у обоих методов есть свои преимущества и недостатки.

Самый естественный способ для людей думать о числах в терминах big-endianness, потому что именно так мы обрабатываем десятичные числа. В вашем случае можно сказать, что десятичное число 2427130573 записано в формате с прямым порядком байтов, то есть наиболее значимая цифра (2) записывается первой, значение уменьшается по мере того, как вы идете направо (т.е. изменение значения самой левой цифры имеет наибольшее значение на стоимость номера). Число также может быть записано слева направо как 3750317242 с наименьшей значащей цифрой первым, если вы знаете, что читаете его таким образом (РЕДАКТИРОВАТЬ: кстати, именно поэтому файлы Unicode должны иметь метку порядка байтов (BOM), сохраненную в первом 2 байта файла, чтобы операционная система знала, как его интерпретировать.)

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

Я надеюсь, что это помогает уточнить несколько!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .