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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> может ли быть такое 
V
    Опции темы
uranpro
Дата 25.7.2010, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток.
есть сервер на C#, который отправляет Java клиенту 4 байта:
141 40 0 0
Java клиент получает:
-115 40 0 0
smile

Добавлено через 2 минуты и 13 секунд
PS: Байты получаются таким образом(C#): BitConverter.GetBytes((Int32)Data.Length)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
jk1
Дата 25.7.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Не вижу ничего удивительного, ведь в С# тип byte беззнаковый и имеет диапазон [0,255], в Java же ведущий бит будет интерпретирован как знак (так как byte в Java имеет диапазон [-128,127]). Вот и получается, что для чисел из диапазона [128,255] происходит неправильная интерпретация.
Если Вы хотите получать именно те числа, которые отправляете, то на клиенте прибавляйте к отрицательным числам 256.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
uranpro
Дата 25.7.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо огромное! smile 


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
jk1
Дата 25.7.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile 
Всегда пожалуйста


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
uranpro
Дата 25.7.2010, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не подскажете еще
как видно, я отправляю Int32, клиент должен перевести из байтов в int. много гуглил и нашел вот это
Код

    static int getInt(byte[] b){
        return (b[0] << 24)
                + ((b[1] & 0xFF) << 16)
                + ((b[2] & 0xFF) << 8)
                + (b[3] & 0xFF);
    }

но почему-то не работает =(
BitConverter пишет как little-endian


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
jk1
Дата 26.7.2010, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

BitConverter пишет как little-endian 

Java-машина использует Big-endian представление int'a. Соответственно на клиенте надо будет применять преобразование вида
Код

public int transform(int v) {
   return  (v >>> 24) | (v << 24) | 
       ((v << 8) & 0x00FF0000) | ((v >> 8) & 0x0000FF00);
}
 

Хотя, если исходный материал - байты, то можно просто поменять порядок:
Код

static int getInt(byte[] b){
        return (b[3] << 24)
                + ((b[2] & 0xFF) << 16)
                + ((b[1] & 0xFF) << 8)
                + (b[0] & 0xFF);
}


Это сообщение отредактировал(а) jk1 - 26.7.2010, 08:04


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
uranpro
Дата 26.7.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спс еще раз! очень помог! smile 


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

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

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


 




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


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

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