Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/49: Рейтинг темы: голосов - 49, средняя оценка - 4.55
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43

Беззнаковые типы в java

06.10.2010, 18:57. Показов 9754. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Где беззнаковые типы в идеальном языке?
Ситуация такая. Считываю данные с контроллера по TCP/IP, он отправляет слово (word) в двух байтах. Контроллер отправляет два байта: 0x200 и 0x1, но как-то получается, что arr[i] = (byte) buff_reader.read() запихивает в массив значения -3 и 1. Каким образом можно из этого получить желаемые значения? Чтоб потом собрать это слово обратно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2010, 18:57
Ответы с готовыми решениями:

Есть ли беззнаковые числа в Java?
Уважаемые знатоки Java. Есть ли беззнаковые числа в Java, такие как в СИ?

Ссылочные типы данных Java!
Создайте класс, который может решать следующие задачи: С клавиатуры вводится последовательность символов. После ввода каждого символа...

Типы данных в Java
Всем привет. В Си для кроссплатформенного программирования есть спецификация спецификация типов в Си Вопрос: в Java размеры...

20
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
06.10.2010, 19:00
Нету беззнаковых типов.
1
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
06.10.2010, 19:02  [ТС]
То что нетУ, я уже убедился
Теперь помогите пожалуйста решить проблему.
Заранее спасибо.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
06.10.2010, 19:07
Покажите кусочек кода.

Добавлено через 1 минуту
Скорее всего вам поможет обертка в виде DataInputStream.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
06.10.2010, 19:13  [ТС]
Java
1
2
3
4
5
BufferedReader br = трампампам(буф. чтение из сокета);
byte[] arr = new byte[6];
for (int i = 0; i < 6; ++i) {
    arr[i] = (byte)br.read();
}
Вот так считывается. Те же гаденькие -3 и 1 в arr[3] и arr[4] вместо 0x200 и 0x1 соответственно.
По-хорошему я должен их "объединить" и перевести в инт.
Java
1
int word = arr[3] | (((int)arr[4]) << 8);
Но так, увы , не работает.
Паника.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
06.10.2010, 19:43
Значит я написал чето, потом понял, что это бред, и задумался.

Добавлено через 17 минут
Java
1
2
3
4
5
BufferedReader br = трампампам(буф. чтение из сокета);
int[] arr = new int[6];
for (int i = 0; i < 6; ++i) {
    arr[i] = br.read();
}
Black magic. Теперь должно заработать.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
06.10.2010, 19:58  [ТС]
Интересно девки пляшут. Теперь вообще 65533 и 1, хотя точно знаю что передаются 0x200 и 0x1 (это уже паранойя) %)
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
06.10.2010, 20:03
Цитата Сообщение от vlitomsk Посмотреть сообщение
int word = arr[3] | (((int)arr[4]) << 8);
Что-то непонятно, что вы делаете. Третий и четвертый байт вообще-то относятся к разным числам.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
07.10.2010, 10:36  [ТС]
как это - непонятно?
arr[3] - младший байт, arr[4] - старший. Нужно их соединить в слово.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
07.10.2010, 10:45
for (int i = 0; i < 6; ++i) {
arr[i] = br.read();
}
Если читаете так, то эти байты относятся к разным числам.

Добавлено через 5 минут
Хотя может я вру, я же не знаю, что именно и сколько у вас там передается.

Добавлено через 1 минуту
Цитата Сообщение от vlitomsk Посмотреть сообщение
два байта: 0x200 и 0x1
Какого фига, 0x200 - это 512.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
07.10.2010, 19:19  [ТС]
Что-то я уже сам запутался.
01:00:66:00:35:00:2f:5f:4f:50:4c:43:fe:0 1:01:00:00:00:84:00:00:00:00:00:00:00:14 :00:30:30:7b:00:c8:01:00:00:00:00:00:00:00:00:00:00:00:00:00: 00:00:00:00:00:5c
Вот посмотрел в сниффере, эту строку я принимаю. Выделены два байта, которые нужно собрать в слово. Но 0xc8 перековеркивается вообще до неузнаваемости из-за отсутствия беззнаков. Как получить его "нормальное" значение, если его значение, полученное в результате "обработки" Java - 65536 или -3 (смотря в какой тип запихивать). Как я понял, в яве для отрицательных чисел используется дополнительный код (http://ru.wikipedia.org/wiki/Д... ние_числа)), но мне он как-то мало помог. Помогите, пожалуйста, уже не первые сутки бьюсь с этой проблемой.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
07.10.2010, 20:27
Непонятно, че у вас не работает. Просто читаете байты в переменные типа int, и обрабатываете битовыми операциями, больше ничего вроде не нужно. Покажите код.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
08.10.2010, 13:58  [ТС]
Java
1
2
3
4
5
BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
int a = br.read();
int b = br.read();
br.close();
int res = a | (b << 8);
Но так не работает! Потому что в a лежит не 0xc8, а 65533!! Так говорит System.out.println(a).
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
08.10.2010, 14:29
Черт, я идиот. Сразу не заметил. BufferedReader - символьный поток ввода.
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
08.10.2010, 14:30  [ТС]
А что делать? Есть какая-нибудь рабочая альтернатива?
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
08.10.2010, 14:35
Используйте байтовые потоки.
Java
1
DataInputStream in = new sock.getInputStream();
Наверно так.

Добавлено через 4 минуты
И потом
Java
1
2
3
int a = in.readByte();
int b = in.readByte();
//танцы с битами
1
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
08.10.2010, 14:50  [ТС]
Урра!!!!! Спасибо огромное!!!!!
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
08.10.2010, 14:53
Оно работает? Странно.

Добавлено через 41 секунду
А как насчет 0xFFFF?
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
08.10.2010, 14:56  [ТС]
Да, работает. Теперь вместо злосчастного -3 там лежит -56, что при некотором шаманстве дает 200.
--
Какие такие 0xFFFF?
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
08.10.2010, 14:57
Ну типа 0xFF и 0xFF. Но вижу, вы уже разобрались со знаками.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.10.2010, 14:57
Помогаю со студенческими работами здесь

Беззнаковые типы
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { const unsigned char g = 249; // выводит - int f =...

Чем отличаются знаковые и беззнаковые типы?
Здравствуйте. Все не могу понять, чем отличаются знаковые и беззнаковые типы? И для каких типов они есть? short int это тоже самое, что и...

Производные и ссылочные типы данных в Java это одно и тоже?
Производные и ссылочные типы данных в Java это одно и тоже? Производные типы данных просто вообще не встречала, только в С++

Целые беззнаковые числа
Всем доброго времени суток ) Помогите пожалуйста написать программу на языке ассемблера. Условия задачи. Ввести с клавиатуры целое...

Усреднить беззнаковые упакованные слова
Здравствуйте, дорогие форумчане! Есть задача: дано два массива (назовём их mas1 и mas2) состоящие из целых числе, формат слово. Нужно с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru