powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Прочитать 4 байта как unsigned в long
15 сообщений из 15, страница 1 из 1
Прочитать 4 байта как unsigned в long
    #39807633
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется прочитать из массива байт 4 байта как безнаковое число.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807691
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
long не бывает безнаковым

А так, см. ф-ции в соответсвующих классах. Ну и не понятно, что Вы имеете в виду под "массив байт 4 байта" (какой порядок следования байтов и так далее). Можно читать по байтно и потом комбинировать сдвигами и OR. Можно просто не проверяя тип скастовать. Например https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html имеет методы кастовать данные практически в любой тип.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807771
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

авторlong не бывает безнаковым

имеется в виду сохранить 4 байтовое безнаковое в long.

авторкакой порядок следования байтов и так далее

От старшего к младшему.

авторМожно читать по байтно и потом комбинировать сдвигами и OR

Это и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807778
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusЭто и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается.
А что там гуглить? Это в школе на уроке информатики в 7-м классе проходят.

Не думал, не проверял. возможно дичь:

byte b1, b2, b3, b4;
long res;
res := (long)(b1 << 24) | (long)(b2 <<16) | (long)(b3 << 8) | (long)b4;
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807779
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusимеется в виду сохранить 4 байтовое безнаковое в long.В дополнительной кодировке старший бит не имеет сакрального смысла - (без)знаковость проявляется в конкретных операциях.
API для беззнаковых чисел есть в Java8.
mr_virtusЭто и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается.Как уже говорили: ByteBuffer - там и чтение/запись и установка порядка байт.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807783
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

авторНе думал, не проверял. возможно дичь:
byte b1, b2, b3, b4;
long res;
res := (long)(b1 << 24) | (long)(b2 <<16) | (long)(b3 << 8) | (long)b4;

В ByteBuffer подглядел -

авторstatic private long makeLong(byte b7, byte b6, byte b5, byte b4,
byte b3, byte b2, byte b1, byte b0)
{
return ((((long)b7 ) << 56) |
(((long)b6 & 0xff) << 48) |
(((long)b5 & 0xff) << 40) |
(((long)b4 & 0xff) << 32) |
(((long)b3 & 0xff) << 24) |
(((long)b2 & 0xff) << 16) |
(((long)b1 & 0xff) << 8) |
(((long)b0 & 0xff) ));

Осталось убедиться, что ваш вариант рабочий) Спасибо.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807785
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Спасибо.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807788
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

авторВ ByteBuffer подглядел -

Точнее этот метод взял из Bits.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807796
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слона. что 4 байта это int, а не long, я даже и не подумал/не заметил )))
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807823
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и да, так просто кастовать безнаковые к большему типу нульзя ((( знаковый бит размножаться будет (поэтому его потом через AND зачищают)
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807845
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВ дополнительно м й код е ировкеЗачеркнул и подчеркнул.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807849
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

авторНу и да, так просто кастовать безнаковые к большему типу нульзя ((( знаковый бит размножаться будет (поэтому его потом через AND зачищают)

Ну да.

long var = (((long)b3 & 0xff) << 24) | (((long)b2 & 0xff) << 16) | (((long)b1 & 0xff) << 8) | (((long)b0 & 0xff) ));

Осталось понять, нет ли здесь подвоха)
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807853
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ дополнительной кодировке старший бит не имеет сакрального смысла - (без)знаковость проявляется в конкретных операциях.

Я честно говоря не очень понял(мне нужно 4 байта в long преобразовать как unsigned с точки зрения, что в int большое число может не влезть(как раз из-за того что под знак часть места отводится в int))

Сорян, если туплю. Надо будет почитать про дополнительный код.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807864
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusЯ честно говоря не очень понял(мне нужно 4 байта в long преобразовать как unsigned с точки зрения, что в int большое число может не влезть(как раз из-за того что под знак часть места отводится в int))Четыре байта это int. Если вы хотите преобразовать его в long как unsigned int, то возможно (ненужное) расширение знака.
Расширение знака "тривиально обнуляется" или битовой маской или двумя сдвигами.
...
Рейтинг: 0 / 0
Прочитать 4 байта как unsigned в long
    #39807869
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, как обычно, до начала велосипедостроительных работ полезно заглянуть в документацию .
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Прочитать 4 байта как unsigned в long
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]