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

 
 
> А кто ткнет в наиболее правильный способ, борьбы с индианностью в С
Evgeny_CD
сообщение Jul 11 2005, 12:55
Сообщение #1


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Пишется код. Он будет идти на разных платформах/компилерах. Почти наверняка будет разная endian: младший байт вначале (прямой порядок, Little Endian) или старший байт в начале (обратный порядок, Big Endian).

Соотвественно, если к какой-то переменной обращаются не только как, например, int (он тоже разный на разных платформах), но и как к массиву из 2 или 4 байтов, то это вызовет очень веселые глюки.

Кстати, а с 32 битами приколов разной индианности не бывает (когда для dword и word раные endian)?

Какой наиболее правильный способ борьбы с этим?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andrew2000
сообщение Jul 11 2005, 13:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



#ifdef BIG_ENDIAN
#define intswap(x) ((((x)&0x00ff)<<8)|(((x)& 0xff00)>>8))
#else
#define intswap(a) a
#endif
или что-то типа этого
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jul 11 2005, 13:37
Сообщение #3


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Цитата(Andrew2000 @ Jul 11 2005, 17:20)
#ifdef BIG_ENDIAN
#define intswap(x) ((((x)&0x00ff)<<8)|(((x)& 0xff00)>>8))
#else
#define intswap(a) a
#endif
или что-то типа этого
*
Спасибо! Но в таком случае при разной индианности будет разное количество операций. Что не есть гуд.

Хотелось бы идею, как свести алгоритм к примитивам, а их уже менять макросами в зависимости от дефайна.
Go to the top of the page
 
+Quote Post
acex2
сообщение Jul 11 2005, 14:30
Сообщение #4


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Цитата(Evgeny_CD @ Jul 11 2005, 10:37)
Хотелось бы идею, как свести алгоритм к примитивам, а их уже менять макросами в зависимости от дефайна.


А вы посмотрите исходники криптографических алгоритмов на Си - там такая задача решается именно через define и макроопределения базовых операций с байтами в зависимости от индианности. Но вот сохранить равное количество команд вряд-ли получится, разве что отключать оптимизацию компилятора или специально вводить nop.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jul 11 2005, 15:17
Сообщение #5


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Цитата(acex2 @ Jul 11 2005, 18:30)
А вы посмотрите исходники криптографических алгоритмов на Си - там такая задача решается именно через define и макроопределения базовых операций с байтами в зависимости от индианности. Но вот сохранить равное количество команд вряд-ли получится, разве что отключать оптимизацию компилятора или специально вводить nop.
Хорошая мысль! Спасибо!

Искуственно замедлять проц не надо, надо не нагружать его лишней работой. biggrin.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 12:56
Рейтинг@Mail.ru


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