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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Split int 
:(
    Опции темы
W0LF
Дата 5.7.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Мне надо разбить int на два байта ну и соответственно обратно потом собрать, вот два метода:
Код

 /**
     * Splits int on two bytes
     * @param i int
     * @param byteArrayOfInt Array of bytes, into which the int is broken
     *          byte[0] - senior byte
     *          byte[1] - junior byte
     */
    public void splitInt(int i, byte[] byteArrayOfInt){
        System.out.println("!!!! byte & = "+(i&255));
        byteArrayOfInt[1] = (byte)(i&255);
        System.out.println("!!!! byte >> = "+(i>>8));
        byteArrayOfInt[0] = (byte)(i>>8);
    }

    /**
     *
     * @param byteArrayOfInt Array of bytes, into which the int is broken
     *          byte[0] - senior byte
     *          byte[1] - junior byte
     * @return int
     */
    public int mergeInt(byte[] byteArrayOfInt){
        return (byteArrayOfInt[0])<<8 | byteArrayOfInt[1];
    }

Но, почему не выводит правильно все инты, которые лежат в диапазоне -32768..-256   и   256..32768?
Де-то я туплю, а вот де? 


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Бонифаций
Дата 5.7.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



дак int же 4 байта 


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
W0LF
Дата 6.7.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Да, ты прав. я затупил конечно. Тогда short. Но все-равно в инте бы эти два байта были младшими просто и все smile. Идея та же, ток для short.

Добавлено @ 16:00 
Есть такие замечательные интерфейсики - java.io.DataInput и java.io.DataOutput.
Там энто есть. Ну и все же, в чем моя ошибка? 


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Dancer
Дата 7.7.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Код

/**
* Put byte value to packet byte array.
* Put byte to current position and increse current position to 1
* @param value Byte value wich put to packet array
* @see put(short value) 
* @see put(int value) 
* @see put(byte[] value) 
*/
    public void put(byte value) {
        buffer[pos++] = value;
        lastPos = (pos > lastPos)? pos: lastPos;
    }

/**
* Put short value (2 bytes) to packet byte array.
* Put short value from current position and increse current position to 2.
* First byte put to packet array must LowByte of short value
* Second byte put to packet array must HighByte of shor value
* @param value Short value wich put to packet array
* @see put(byte value) 
* @see put(int value) 
* @see put(byte[] value) 
*/
    public void put(short value) {
        put((byte)(value&0xFF));
        put((byte)((value&0xFFFF)>>8));
    }

/**
* Put int value (4 bytes) to packet byte array.
* Put int value from current position and increse current position to 4.
* First byte put to packet array must LowByte of short value
* Fourth byte put to packet array must HighByte of shor value
* @param value Integer value wich put to packet array
* @see put(byte value) 
* @see put(short value) 
* @see put(byte[] value) 
*/
    public void put(int value) {
        put((short)(value&0xFFFF));
        put((short)((value&0xFFFFFFFF)>>16));
    }



Добавлено @ 09:18 
Код

    public static long getPacketLen(byte[] packet) {
        long sum = 0;
        for(int i =0; i<packet.length; i++) {
            long lon= (packet[i] & 0xF0 >> 4 << 4) + (packet[i] & 0x0F);
            sum += lon << (i*8);
        }
        return sum;
    }

/**
* Read 2 bytes from packet array and cast it to Integer. 
* Read bytes form current packet position and increese current position to 2
* @return integer value
*/
    public int getShortInt() {
        byte[] b = new byte[2];
        b[0] = buffer[pos++];
        b[1] = buffer[pos++];
        return (int)getPacketLen(b);
    }

/**
* Read 4 bytes from packet array and cast it to Integer. 
* Read bytes form current packet position and increese current position to 4
* @return integer value
*/
    public long getInt() {
        byte[] b = new byte[4];
        b[0] = buffer[pos++];
        b[1] = buffer[pos++];
        b[2] = buffer[pos++];
        b[3] = buffer[pos++];

        return getPacketLen(b);
    }


 


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
W0LF
Дата 7.7.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Спасибо, Dancer.
У меня там в методе mergeInt вместо  
Код

return (byteArrayOfInt[0])<<8 | byteArrayOfInt[1];

нужно было
Код

 return ((short)byteArrayOfInt[0])<<8 | (((short)byteArrayOfInt[1])&255);

Небыло расширения до short. 


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




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


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

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