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


13

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

Недавно я получил интервью с вопросом о разнице между ними; так как я не помнил, я решил «угадать» (50% -ный шанс, в конце концов), но я потерпел неудачу.

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


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

У меня тоже есть проблемы с запоминанием, и слишком много запутанных мнемотехнических приемов. Моя единственная надежная помощь - наложить заклинание порядка байтов на Google, чтобы я получил статью в Википедии .
Mouviciel

3
Забавное совпадение - я только сегодня наткнулся на эту ссылку, и она удивительно актуальна commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@ Nevermind Я перестал читать эту статью после второго абзаца. «Интересно только авторам компиляторов и людям, которые имеют дело с памятью, отображаемой на регистры»? Помимо того факта, что это ужасное предложение для садового пути , это означает, что код, который имеет дело с регистрами, является крайним случаем. Попробуйте использовать компьютер иногда без драйверов устройств.
dodgethesteamroller

Ответы:


14

Я всегда думал, что это определено неправильно, и это также совет, чтобы запомнить это. Я не являюсь носителем английского языка и вижу «конец» как противоположность «начала» (хотя очевидно, что «конец» может означать либо конец - начало конца, либо конец конца). Во всяком случае, я просто помню, что "это определено неправильно" :)

  • В старшем порядке самый старший (самый большой) байт находится в начале .
  • В младшем порядке , младший байт (младший) находится в начале .

Или, ссылаясь на порядковый номер бита :

  • 128 64 32 16 8 4 2 1 является прямым порядком байтов, потому что он заканчивается маленьким.
  • 1 2 4 8 16 32 64 128 является прямым порядком байтов, потому что он заканчивается большим.

Хотя обычное использование слова endianness относится к тому, как байты упорядочены внутри слова, его общее значение относится к упорядочению индивидуально адресуемых подкомпонентов в представлении большего элемента данных ( как объяснено в Википедии ).


5
ааа, но лилипутианцы с прямым порядком байтов начали (трескали) свои яйца на маленьком конце, так что это правильный путь
jk.

4
-1: Endian-ness обозначает байты в слове, а не биты в байте.
kdgregory

1
@kdgregory - В конце концов, битовая нумерация затрагивается одним словом. Вы пробовали структуры битового поля для разных порядков байтов? Я согласен с тем, что ответ неверен.
Mouviciel

@Kdgregory: Согласно Википедии , порядковый номер относится к упорядочению индивидуально адресуемых подкомпонентов в представлении большего элемента данных. Это общий случай. Есть также понятие битового порядка байтов . Вы правы в том, что наиболее распространенное использование порядка байтов относится к тому, как байты упорядочены в слове, и мои примеры по общему признанию не отражали это. Заменил первый пример на общий случай.
Joonas Pulakka

2
@kdgregory: С каких это пор требуется наличие аппаратного обеспечения для обоснования теоретических представлений о CS? Но очень хорошо: у 8051 есть бит-адресуемые регистры. Язык Ada позволяет указать соответствующий битовый порядок для представления типа данных ( pdf ). Порядок передачи битов через последовательный носитель, конечно, должен определять порядок следования битов. Тот факт, что обычное использование «порядка байтов» относится к особому случаю (байты в словах), не отменяет его общего значения.
Joonas Pulakka

33

Мой собственный совет:

  • big endian = big-end first! (первый байт (самый младший адрес) - это MSB)
  • little endian = маленький конец первым! (первый байт (младший адрес) - младший бит)

3
Да, вот как я думаю об этом: Big Endian «начинается с большого конца», а Little Endian «начинается с маленького конца». Это как бейсбольная бита, у нее два конца, один большой, другой маленький. Это на самом деле не так уж сложно.
Шейн Килкелли

6

Лучший способ запомнить это - это то, что цивилизованные люди ищут разнообразие и, следовательно, едят свои яйца иначе, чем они заказывают свои числа. Принимая во внимание, что мы записываем десятичные цифры, начинающиеся с больших цифр вначале (big endian), мы едим яйца всмятку с маленького конца (little endian).


1
Этот ответ в основном не технический, но он был абсолютно точным и заставил меня смеяться. Молодец.

6

Числа с прямым порядком байтов начинаются с «большого конца». Числа с прямым порядком байтов начинаются с «маленького конца».

Оба являются намеком на проблему того, где начать есть ваше яйцо, согласно Путешествия Гулливера.

В этом случае «конец» не является противоположностью начала, он просто означает любую крайность (канат | строка | число | последовательность), поэтому их не называют «большой финиш» или «маленький финиш» (что определенно будет противоположность «начала»).


В самом деле. И самый простой (и самый забавный) способ запоминания - пойти и прочитать «Путешествия Гулливера». Я гарантирую, что вы никогда не забудете, что опять же!
Жюль

Вы должны поставить «начать есть» жирным шрифтом (также 72pt, <blink>), вот в этом и заключается вся причина этой путаницы.
T Nierath

2

Самый простой способ для меня помнить - это заменить слово «endian» на «startian». Большие начальные целые числа начинаются с большого конца (например, старшие значащие байты идут первыми), а маленькие старшие целые числа начинаются с меньшего конца (например, младшие значащие байты идут первыми).


Не стесняйтесь произносить startian как /'stɑːr.ʃən/ или /'stɑːr.ti.ən/ (пропустите / r / для неротических акцентов)
dreamlax

Это довольно умно и легко запомнить.
Coldblackice

1

Я никогда не мог вспомнить, что является «старшим порядком байтов», а что «младшим порядком байтов», но я знал, что процессоры PowerPC и Intel x86 имеют порядок байтов. Little имеет большинство букв, общих с Intel, поэтому Intel x86 имеет младший порядок.

Конечно, это полезно, только если вы знаете порядок байтов PPC и x86. С другой стороны, вы должны помнить, что Intel x86 = little-endian. И помните, что x86 и ARM очень, очень совместимы даже с совершенно разными наборами команд.


1

Я бы сказал так: Большой - это красиво!

Большой == красивый == верно.
Правильный порядок байтов - это тот, который вы можете прочитать в hexdump, который ставит самый значимый байт на первое место, как любой здравомыслящий человек.

Немного == некрасиво == неправильно.
Hexdumps, создаваемые этим порядком байков, настолько ошибочны, что вы убегаете с криком «Мозги!». Может быть, это какая-то инопланетная мерзость, мы можем только догадываться о происхождении этого зверства. Тем не менее, оно существует, и мы застряли с ним.

Питти, это не всегда лучший вариант, который делает гонку ...


Little == ugly == wrong... «Даже самый маленький человек может изменить курс будущего» - Галадриал, LOTR
Coldblackice

-1

В старшем порядке: (в порядке возрастания)

От низкого до высокого т.е.

0 | 1 | 2 | 3 ^ ^ Начало Конец

В порядке байтов: (по убыванию)

По убыванию

т.е.

3 | 2 | 1 | 0 ^ ^ Начало Конец


1
Вопрос задал практический трюк, чтобы запомнить какой.
gnasher729
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.