Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать реверсию байта? 
V
    Опции темы
bougle
  Дата 8.5.2006, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



Не путать с инверсией байта. При реверсии происходит поворот байта относительно его середины. 
11001111 ->11110011
Я поискал в api и такой функции не нашел. Может плохо искал, на пришлось придумать самому.
Только вот подскажите как в массив типа byte[] записывать значения? Мне ошибка выдается что тип int нельзя записать в byte[].
Код

byte[] bu = new byte[30400];
        for(int i =0; i<30400;i++)
        {   int bubu = 0;
            for(int j=0;j<8;j++)
            {
                if(bu[i]/(Math.pow(2,(7-j)))>1)             
                {
                    bubu=bubu+(2^j);
                    bu[i]=bu[i]-2^(7-j);         //Ошибка
                }
            
            }
            bu[i]=bubu;                             //Ошибка

        }

Это был бы верный алгоритм если бы из байта доставалось число от 0 до 255, а не от -128 до 127.
Можете помочь?  

Это сообщение отредактировал(а) bougle - 8.5.2006, 04:53
PM MAIL   Вверх
garm
Дата 8.5.2006, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 23.3.2006

Репутация: 2
Всего: 2



Примерно так всё должно выглядеть:
Код

byte b = -126;        //Байт для реверсии
int iv = b & 0xFF;    //Он же, но без знака.
byte bv = 0;           //Результат
for(int i = 0; i < 8; i++)
{
    bv =  (byte)(bv | (((iv >> i) & 1) << (7 - i)));
}
 
PM   Вверх
bougle
Дата 9.5.2006, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



Спасибо. Благодаря тебе я поискал, что такое битовые операторы и теперь буду ими пользоваться.
Вот что получилось в итоге:
Код

int level=250;
        int coef=4;
        int gu = 0;
        for(int i =0; i<30400;i++)
        {         
            int bubu = (bu[i])&0xFF;
            byte bv=0;             
            for(int j = 0; j < 8; j++)    
{    
    bv =  (byte)(bv | (((bubu >> j) &1) << (7-j)));    
}
            bubu=~bv&0xFF;
//Увеличим контраст
            if((gu=level-bubu)>0)
            {
                bubu=level-gu*coef;
            }
            bu[i]=(byte)(bubu);
        }

От датчика отпечатка пальца принимается растр, но немного не в нужном формате. Каждый байт реверсируется и инвертируется. Потом делаем небольшое увеличение контрастности. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0912 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.