Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Модификация представления данных


Автор: tenebris 11.9.2008, 15:05
Есть переменная равная = 78 56 34 12
Как её преобразовать в другой формат на Си в 12 34 56 78
Не знаю многих функции на Си. Сдвиг не до конца помогает. Посоветуйте плиз.

Автор: mes 11.9.2008, 15:37
то есть надо 4 байта "перевернуть" ?

Код

int32 reverse (int32 i)
{
   return (( i & 0xFF ) <<3 ) |  (( i & 0xFF00 ) <<1 ) |  (( i & 0xFF0000 ) >>1 ) |  (( i & 0xFF000000 ) >> 3 );
};


практически то же самое
Код

int32 reverse (int32 i)
{
   return ((i >> 3) & 0xFF) | ((i >>1) & 0xFF00)  | ((i << 3) & 0xFF0000) | ((i << 1) & 0xFF000000);
};


или

Код

union reverse_helper
{
  int 32 i;
  unsigned char c[4];
};
int32 reverse (int32 i)
{
    reverse_helper h; h.i =i;
 
    return (h[0]<<3) | (h[1]<<2) | (h[2]<<1) | h[3]; 
};


Автор: tenebris 11.9.2008, 15:42
Да забыл сказать что там всё в батах и в хексе

Добавлено через 6 минут и 46 секунд
А какие есть функции выделения младшей части или типа того?

Автор: mes 11.9.2008, 16:04
Цитата(tenebris @  11.9.2008,  15:42 Найти цитируемый пост)
А какие есть функции выделения младшей части или типа того? 


i &= 0xFF; // младший байт
i &=0xFFFF; // младшее слово
i &=0xFF00; // старший байт слова
i &=0xFFFF0000; // старший слово  двойного слова
остальное по аналогии






Автор: tenebris 11.9.2008, 16:13
Не ну в Паскале есть lo(x),shl,shr Я вот про что

Автор: mes 11.9.2008, 16:23
Цитата(tenebris @  11.9.2008,  16:13 Найти цитируемый пост)
Не ну в Паскале есть lo(x),shl,shr Я вот про что 

ну а чем не подходят выше упомянутые   >>, <<, &  ?

Автор: tenebris 11.9.2008, 16:59
Не всё подходит конешн  smile  Просто спрашиваю функции какие есть. Надо же полностью на Си переходить. мне

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)