![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| zone51 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Помогите пожалуйста осуществить приведение байтового массива в тип лонг ну или инт. Огромное спасибо.
-------------------- The truth is out there |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
что конкретно подразумевается под приведением?
Вобщем, как я понял, самое логичное - это приведение типа такого: {0x03,0x10,0x20} -> 3*256^2 + 16*256 + 32 = 200736. Если, это так, то написать программу подобного приведения не составит труда, но нужно более подробно определиться, как будет представлятся знак "минус" (можно выделить дополнительный байт). Нужны дополнения, что именно подразумевается под "приведение". Добавлено @ 06:52
Это сообщение отредактировал(а) Alexandr87 - 9.12.2006, 06:53 |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Alexandr87, думаю степени лучше заменить на сдвиги, производительней будет.
и смотря где у нас старше разряд так и делаем. Если {0x03, 0x10, 0x20} старший разряд левее, то в скобках пишем ((long)in[in.length-1-i]), а если старший разряд правее, то ((long)in[i]). |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Оба этих метода неправильно работают:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Alexandr87 |
|
||||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
да уж - погнал я немного с типами - забыл что byte (-128..127). Тогда есть два выхода - самому интерпретировать отрицательные значения - и переводить их в соответсвующие положительные, либо просто взять тип с длиной побольше. На мой взгляд второй вариант лучше. Типа того
|
||||||
|
|||||||
| zone51 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Alexandr87,
LSD, Platon, Спасибо Вам огромное что откликнулись, но у меня задача такая: числа положительные, и есть бинарный файл в котором находятся структуры С. Мне эти структуры надо по байтам запихнуть в ява классы. То есть есть структура в ней поля допустим типа лонг, чар и сшорт. Так вот моя прога считывает из файла блоки 4,1,2 байта, всего 7 байт блок, и загоняет в поля классов. Причем очень желательно реализовать считывание именно байт из файла а не сразу чисел-нужно сохранить наглядность -------------------- The truth is out there |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вовсе нет, надо просто делать b[i] & 0xFF. Посмотри код методов в DataOutputStream. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| shimopus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 25.8.2006 Репутация: 1 Всего: 1 |
Прошу прощения за небольшой оффтоп, но уже во второй ветке появляется это магическое b[i] & 0xFF. Расскажите, плиз поподробнее зачем это надо.
|
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
все операции которые укладываются в int, делаются в int. В байте один бит отвечает за представление знака, операция &0xFF, ничего по сути не делает - выдает ту же последовательность бит, что и была в байте, вот тока теперь это интерпретируется как int, и соответственно бит, который отвечал за знак, теперь представляет дополнительный разряд числа. Так, что по-сути это и есть первый вариант - интерпретация (только умный, я что-то про него не подумал). |
|||
|
||||
| alexsmirnov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.8.2005 Репутация: нет Всего: 7 |
Вообще-то все это реализовано в NIO - java.nio.ByteBuffer , и всякие LongBuffer, IntBuffer etc.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Только создавать новый LongBuffer или IntBuffer ради одного long-а или int-а, не целесообразно. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| zone51 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
LSD,
Большое спасибо Вам и всем кто откликнулся. Сделал сдвигами-все просек-пойдет. Терь немножко другая проблема-отдельную тему не захотел заводить ибо много. Есть класс и в нем описано поле типа char[] то есть массив из сколько то там элементов. надо написать для него гет метод. Но вот в чем фишка. Ведь такое не прокатит:
Что то мне такой код не нравится. Как правильно? Спасибо. -------------------- The truth is out there |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Почему не прокатит? 2. Чем именно не нравится? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| zone51 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
LSD,
Ну то что еще со школы укоренилось то что функция не может возвращать массив(из паскаля) а из института то что имя массива без индекса это первый элемент массива(из С++) -------------------- The truth is out there |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Функция может возвращать массив, и в Java это обычная практика
2. Имена полей в Java принято начинать с маленькой буквы. P.S. Только учти одну вещь, массив в Java, это тоже объект и он передается по ссылке. Если ты получив массив начнешь записывать в него новые данные, то ты будешь менять и исходный массив тоже. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я выделил часть про оптимизатор в новую тему.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| cardinal1980 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.11.2006 Где: Питер Репутация: нет Всего: нет |
У меня очень похожая задача, я получаю из файла информацию блоками по 99 байт, в блоке содержаться сжатые данные типа инт, то есть там могут быть и 4-х байтовые и 3-х байтовые и 2-х байтовые и 1 байтовые числа, как со знаком так и без.
Вопрос каким образом получить эту информацию. Попробовал воспользоваться ByteBuffer положил в него массив из 4-х байт и попробовал получит целое. Не получается. Мучаюсь уже месяц. Обрабатывать нужно большие объемы данных 99х1000. Посоветуйте как лучше поступить: написать свой обработчик массива или все же есть стандартные средства преобразования байтовых переменных в целочисленные.
если указываю g=r.getInt(0); или g=r.getInt(1); выдает разные значения Если не трудно объясните структуру хранения данных в ByteBuffer |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Писать руками, т.к. ни один стандартных класс не может работать со структуроуй у которой содержаться сжатые данные типа инт, то есть там могут быть и 4-х байтовые и 3-х байтовые и 2-х байтовые и 1 байтовые числа, как со знаком так и без. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
Есть байтовый массив из 4-х элементов, которых хранит дату, хотелось бы это в лонг перевести, те способы что на первой странице дают дату аж 1970 года... что то думаю там не так ((( Ай нид хэлп...
-------------------- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А в каком формате он ее хранит, надо угадать? Я правильно понял? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |