реклама на сайте
подробности

 
 
> Битовые поля - есть ли способ поменять Little Endian на Big Endian, расположение битов
sonycman
сообщение May 30 2009, 22:21
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Осваиваю тут карты памяти, и возникла нужда поработать со структурами их регистров.
К примеру:
Код
__packed    struct    CID
{
    byte        man_ID:            8;
    byte        oem_ID[2];
    byte        product_name[5];
    byte        revision:        8;
    dword        serial:            32;
    unsigned    :                4;
    word        man_date:        12;
    unsigned    crc:            7;
    unsigned    dummy:            1;
};

Вроде бы всё хорошо, да только данные в такой структуре должны идти линейно сверху вниз - байт 0 - биты 31...24, байт 1 - биты 23...16 и т.д. (big endian).
А компилятор (RealView) считает наоборот - сначала младшие биты (little endian).

То есть читаем слово revision, в регистре должны быть данные вида 0x08070605 [31...0], а на деле имеем 0x05060708...

Есть ли способ побороть такую досадную "однобокость"?
Иначе придётся ручками обрабатывать все битовые сдвиги и маски... crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AirDevil
сообщение May 31 2009, 07:54
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590



Цитата(sonycman @ May 31 2009, 01:21) *
...
Вроде бы всё хорошо, да только данные в такой структуре должны идти линейно сверху вниз - байт 0 - биты 31...24, байт 1 - биты 23...16 и т.д. (big endian).
А компилятор (RealView) считает наоборот - сначала младшие биты (little endian).

Используйте преобразование типов и всё. Пусть они лежать как лежат.
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 31 2009, 07:57
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AirDevil @ May 31 2009, 11:54) *
Используйте преобразование типов и всё. Пусть они лежать как лежат.

Что-то не понял. А можно пример?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 31 2009, 08:13
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ May 31 2009, 10:57) *
Что-то не понял. А можно пример?
макросы htons(), ntohs()


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 31 2009, 08:19
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ May 31 2009, 12:13) *
макросы htons(), ntohs()


Таких макросов даже нет в комплекте компилятора rolleyes.gif
Они меняют порядок следования битов?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 31 2009, 08:31
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ May 31 2009, 11:19) *
Они меняют порядок следования битов?
Это подколка такая? Ссылку на описание прикрепил ведь. "to and from the network byte order". О порядке битов речь не шла. Порядок битов надо (если надо) менять в точке приема.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sonycman   Битовые поля - есть ли способ поменять Little Endian на Big Endian   May 30 2009, 22:21
- - sergeeff   Это определяется используемым компилятором и возмо...   May 30 2009, 23:59
- - zltigo   Цитата(sonycman @ May 31 2009, 01:21) А к...   May 31 2009, 06:55
|- - Сергей Борщ   Цитата(zltigo @ May 31 2009, 09:55) (они ...   May 31 2009, 08:25
|- - zltigo   Цитата(Сергей Борщ @ May 31 2009, 11:25) ...   May 31 2009, 08:38
- - sonycman   sergeeff zltigo Понятно, спасибо. Так и думал, что...   May 31 2009, 07:51
|- - zltigo   Цитата(sonycman @ May 31 2009, 10:51) Тут...   May 31 2009, 08:18
|- - sonycman   Цитата(zltigo @ May 31 2009, 12:18) Нафиг...   May 31 2009, 08:23
||- - zltigo   Цитата(sonycman @ May 31 2009, 11:19) Так...   May 31 2009, 08:29
||- - sonycman   Цитата(zltigo @ May 31 2009, 12:29) Ужас....   May 31 2009, 08:34
|- - zltigo   Цитата(Сергей Борщ @ May 31 2009, 11:13) ...   May 31 2009, 08:20
- - Rst7   ЦитатаARM в базовой реинкарнации - тоже.... Да та...   May 31 2009, 10:26
- - zltigo   Цитата(Rst7 @ May 31 2009, 13:26) 68k - с...   May 31 2009, 14:31
- - VslavX   Еще PowerPC очень неплохо себя в BE чувствуют. Ком...   May 31 2009, 20:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016