Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/246: Рейтинг темы: голосов - 246, средняя оценка - 4.54
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
1

Порядок байт в big-endian и little-endian

13.06.2013, 11:29. Показов 46332. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Народ подскажите мне пожалуйста простые прописные истины, а то я что то запутался!
Предположим что у нас в байте 8 - бит и где число 5 будет иметь вид 101.
Как будет выглядеть число 5 в 2-х байтах памяти в big-endian и little-endian.

0000 0000 0000 0101 - big-endian ?
0000 0101 0000 0000 - little-endian ?
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2013, 11:29
Ответы с готовыми решениями:

Как объединить пару байт в слово? (Загрузка WAV, Big Endian)
Привет! Есть звуковой файл с 16-и битными амплитудами. Да не суть. После открытия файла и чтения...

Из little endian в big endian
Есть 256-битное 16-ричное число: 54 68 69 73 20 69 73 20 6D 65 73 73 61 67 65 2C 20 6C 65 6E 67 74...

Big-endian тестирование
Есть программа, которая должна работать на little и big endian одинаково. В ней куча всяких...

Как проще всего работать с Big-Endian C++ ?
С++. Как проще всего работать с Big-Endian, используя стандартные операции ?

32
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
14.06.2013, 22:41 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от stawerfar Посмотреть сообщение
Про какой барьер компилятора вы говорите? И как его применять?
Компилятор может в процессе оптимизации сгенерировать такой машинный код, что
он будет лишь очень отдаленно напоминать оригинал: переменные могут быть перемешаны,
помещены в регистры, и т.д. Кое-что вообще будет выкинуто за борт.
В данном примере
Цитата Сообщение от stawerfar Посмотреть сообщение
C++
1
2
int sizebyte = sizeof(val);
int sizebit = sizebyte * 8;
вы не можете быть наверняка уверенным, что переменная sizebyte располагается в
памяти до sizebit, ровно как и наоборот. Точно также нельзя быть уверенным в том,
что присваивание sizebyte выполняется до присваивания sizebit. Например, попробуйте
сделать sizebyte и sizebit глобальными - вполне возможно, что вывод программы будет
другим. Так что этот код некорректен. Для контроля над подобными вещами существуют
барьеры компилятора, в Visual C++, например, это _ReadWriteBarrier и volatile.
Хотя они предназначены в основном для многопоточного кода, а не для таких примеров.
1
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:43  [ТС] 22
А смысл был определить нумерацию адресов на данной машине. То есть сначала или с конца идет нумерация адресов в памяти.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2013, 22:44 23
Цитата Сообщение от stawerfar Посмотреть сообщение
Да я согласен нужно было использовать например
char buff[2];
if (&buff[0] < &buff[1])
А это выражение всегда истинно. Тогда как предыдущее непредсказуемо.
1
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:48  [ТС] 24
Цитата Сообщение от grizlik78 Посмотреть сообщение
А это выражение всегда истинно. Тогда как предыдущее непредсказуемо.
? Можно поподробнее?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2013, 22:49 25
Цитата Сообщение от stawerfar Посмотреть сообщение
То есть сначала или с конца идет нумерация адресов в памяти.
Нумерация всегда идёт с начала, с какой бы стороны это начало не находилось

Добавлено через 1 минуту
Цитата Сообщение от stawerfar Посмотреть сообщение
? Можно поподробнее?
А что подробнее? Элемент массива с индексом 1 всегда имеет адрес больше, чем элемент с индексом 0. Всё.
2
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:49  [ТС] 26
А как тогда проверить машинное представление нумерации адресного пространства?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2013, 22:51 27
А какой от этого толк?
2
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:54  [ТС] 28
Это другой вопрос уже?

Добавлено через 2 минуты
Дело не в толке а в самой сути, я думаю что понимание этого и "ощупывание" расширит мой кругозор в computer science.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2013, 23:04 29
Ну мне просто не очень понятно значение фразы "машинное представление нумерации адресного пространства".
Ну вот, допустим, есть физические адреса, которые выставляются на шине адреса, есть виртуальные адреса, с которыми работает наша программа на C/C++. Что из того, что между этими адресами может не быть ничего общего? Для программы достаточно, что адреса могут принимать только определённые значения и в массивах эти адреса возрастают от элемента к элементу. Что ещё можно узнать изнутри? По-моему ничего. Может я ошибаюсь...
1
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 23:08  [ТС] 30
Я понял нужно мне наверное переходить на изучение какого нибудь ассемблера и книжку про компиляторы почитать.
Что бы такие тонкости хорошо понимать. Всем спасибо.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2013, 23:11 31
Цитата Сообщение от stawerfar Посмотреть сообщение
Я понял нужно мне наверное переходить на изучение какого нибудь ассемблера и книжку про компиляторы почитать.
Кстати, компиляторы обычно имеют ключи, позволяющие сохранить результат трансляции в виде программы на ассемблере. Visual C и GCC точно умеют (да вроде все что видел умели).
Иногда полезно посмотреть, что же "нагенерировал" компилятор. Ну и как практика при изучении ассемблера
1
Nighthome
03.09.2013, 19:16 32
как порядок байт влияет на результат побитовых операцый?
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
03.09.2013, 20:19 33
Имхо, можно так:
C++
1
2
3
4
5
6
    int i=1;
    char *pc=(char*)&i;
    if (pc[0]>pc[1]) 
        cout<<"little-endian";
    else
        cout<<"big-endian";
1
03.09.2013, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2013, 20:19
Помогаю со студенческими работами здесь

Перекодировать из UCS-2 Little Endian в UTF
Есть много файлов *.txt в кодировке (как я понял) UCS-2 Little Endian. Как перевести эти файлы в...

Из UCS-2 Little Endian в UTF-8 без BOM
Здравствуйте! Имеется файлик xml в кодировке UCS-2 Little Endian. Хочу написать обработчик на...

Перегрузка ifstream и ofstream для работы с файлами в little-endian формате?
Всем привет, мне нужно реализовать классы для работы с файлами в little-endian формате. Для этого...

Порядок байт в union
#include &lt;iostream&gt; using namespace std; void disp_binary(unsigned u); union swap_bytes {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru