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

 
 
> Как поменять нибблы в байте местами, на WinAvr
sergeus
сообщение Feb 23 2008, 11:10
Сообщение #1


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Здравствуйте.
Есть переменная unsigned char temp; , необходимо "перевернуть" этот байт (поменять местами нибблы)
Может есть какая команда? Просто не хочется вводить новые переменные.
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
lks
сообщение Feb 23 2008, 13:09
Сообщение #2


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(sergeus @ Feb 23 2008, 14:10) *
необходимо "перевернуть" этот байт (поменять местами нибблы)


Ниббл это 4 бита?
Перевернуть это зеркально 0-7, 1-6 и т.д?
У вас там есть процедура типа union?

Сообщение отредактировал lks - Feb 23 2008, 13:10
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 23 2008, 13:38
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sergeus @ Feb 23 2008, 16:10) *
Здравствуйте.
Есть переменная unsigned char temp; , необходимо "перевернуть" этот байт (поменять местами нибблы)

Может так:
temp = (temp >>4) | (temp <<4); ? :-)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergeus
сообщение Feb 23 2008, 19:19
Сообщение #4


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Цитата(AHTOXA @ Feb 23 2008, 16:38) *
Может так:
temp = (temp >>4) | (temp <<4); ? :-)


Спасибо, я делал аналогично, только еще накладывал маску.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 23 2008, 22:40
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sergeus @ Feb 24 2008, 00:19) *
Спасибо, я делал аналогично, только еще накладывал маску.


Маска здесь вроде ни к чему.

А можно ещё вот так (winavr же?):

Код
__inline__ uint8_t swap(uint8_t a)
{
    __asm__ __volatile__
        ( "swap    %0"        "\n\t"
        : "=r" (a)
        );
  return a;
}


Проверил, работает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


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


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