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

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

06.10.2010, 18:57. Показов 9726. Ответов 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 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru