2014-10-05 2 views
0

Я должен написать процедуру для преобразования между двумя представлениями. Но я немного смущен. Если у меня есть архитектура с памятью со словами из 32 бит , и я должен сохранить слово 0xA15D23B1 с Big-endian, память станет A1 после 5D после 23 и в конце B1 с Little-endian, а память B1 после 23 после 5D и после A1 Правильно ли это?Мало-endian и Big-Endian

Если я могу адресовать отдельные байты на моем компьютере, а адрес моего слова равен нулю , который является байтом 1? В Big-Endian 5D? и в little-endian тоже 5D?

Спасибо всем, кто ответит мне

+0

Нет, это неправильно, у вас есть это в обратном направлении. В младшем значении наименьший значащий байт имеет самый низкий адрес. –

+0

Ваш первый абзац верен, за исключением неправильного использования слова «после», что делает его несколько запутанным (я думаю, вы имели в виду «затем» вместо «после»). Я не понимаю, что вы просите во втором абзаце. – interjay

+0

Вы уже ответили на свой вопрос. «B1 после 23 после 5D и после A1». Можете ли вы описать свою реальную проблему программирования? Нулевой адрес обычно недоступен для программ. И вы можете использовать такие функции, как hton, чтобы избежать необходимости решать проблемы с Endian. –

ответ

5

тупоконечника расположение в памяти наиболее значимые байты первых, в то время как прямой порядок байтов раскладка наименее значащих байт первый. Учитывая значение 0xA15D23B1:

Memory address 0 1 2 3 
Big-endian  A1 5D 23 B1 
Little-endian B1 23 5D A1 

Обратите внимание, что большой обратный порядок байт расположение памяти не меняется относительно размера слова, но мало-младшему делает. Если рассматривать два коротких слова (16 бит), 0xA15D и 0x23B1 хранятся смежно:

Memory address 0 1 2 3 
Big-endian  A1 5D 23 B1 
Little-endian 5D A1 B1 23 
0
  • и мало-Endian является 5D тоже?

Нет, в прямой порядок байтов это 23

0

Хороший способ запомнить «что есть что»:

тупоконечника начинается с большой (наиболее значимом) конца; маленький конец начинается с маленького конца.

Например, когда в отношении слова 0xA15D23B1 в виде последовательности байтов, большой обратный порядок байт машина начинает его от самого старшего байта 0xA1. Он будет храниться на самом низком адресе (это значение потенциально запутанного слова «начало»).

Кстати, если вы хотите конвертировать только от big-endian в little-endian или обратно, вам не нужно это понимать: просто измените порядок байтов! Вот почему многие люди не утруждают себя пониманием what "big-endian" or "little-endian" means - вам обычно нужно только понять, следует ли менять байты или нет.

0

Существует множество способов, с помощью которых процессоры реализуют большие и маленькие символы - для подробного обсуждения обратитесь к статье в Википедии по адресу Endianness.

Для количества 2-байтового, есть только два варианта:

Value:   0x1234 (MSB = 0x12, LSB = 0x34) 
Little-endian: LSB then MSB 0x34 0x12 — Intel, … 
Big-endian:  MSB then LSB 0x12 0x34 — SPARC, PowerPC, … 

Для количества 4-х байт, есть больше вариантов, но все еще есть две основные из них (плюс историческое любопытство):

Value:   0x12345678 (MSB = 0x12, NMSB = 0x34, NLSB = 0x56, LSB = 0x78) 
Little-endian: LSB, NLSB, NMSB, MSB 0x78 0x56 0x34 0x12 
Big-endian:  MSB, NMSB, NLSB, LSB 0x12 0x34 0x56 0x78 
PDP-11:   NMSB, MSB, NLSB, LSB 0x34 0x12 0x78 0x56 

Обратите внимание, что ряд современных наборов микросхем би-младшему - может быть включен, чтобы запустить в тупоконечника или прямой порядок байтов режима:

В некоторых архитектурах (включая версии ARM версии 3 и выше, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4 и IA-64) предусмотрена настройка, которая позволяет переключаться с точностью до сегментов данных, сегментов кода или обоих.

Смежные вопросы