|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Хочется прочитать из массива байт 4 байта как безнаковое число. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 14:29 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
long не бывает безнаковым А так, см. ф-ции в соответсвующих классах. Ну и не понятно, что Вы имеете в виду под "массив байт 4 байта" (какой порядок следования байтов и так далее). Можно читать по байтно и потом комбинировать сдвигами и OR. Можно просто не проверяя тип скастовать. Например https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html имеет методы кастовать данные практически в любой тип. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 15:45 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, авторlong не бывает безнаковым имеется в виду сохранить 4 байтовое безнаковое в long. авторкакой порядок следования байтов и так далее От старшего к младшему. авторМожно читать по байтно и потом комбинировать сдвигами и OR Это и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:18 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
mr_virtusЭто и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается. А что там гуглить? Это в школе на уроке информатики в 7-м классе проходят. Не думал, не проверял. возможно дичь: byte b1, b2, b3, b4; long res; res := (long)(b1 << 24) | (long)(b2 <<16) | (long)(b3 << 8) | (long)b4; ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:26 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
mr_virtusимеется в виду сохранить 4 байтовое безнаковое в long.В дополнительной кодировке старший бит не имеет сакрального смысла - (без)знаковость проявляется в конкретных операциях. API для беззнаковых чисел есть в Java8. mr_virtusЭто и нужно, битовыми операциями. Не получилось нагуглить, думал может кто подскажет точно как правильно делается.Как уже говорили: ByteBuffer - там и чтение/запись и установка порядка байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:27 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
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) )); Осталось убедиться, что ваш вариант рабочий) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:34 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:36 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
mr_virtus, авторВ ByteBuffer подглядел - Точнее этот метод взял из Bits. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:39 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Слона. что 4 байта это int, а не long, я даже и не подумал/не заметил ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 17:47 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Ну и да, так просто кастовать безнаковые к большему типу нульзя ((( знаковый бит размножаться будет (поэтому его потом через AND зачищают) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 18:12 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Basil A. SidorovВ дополнительно м й код е ировкеЗачеркнул и подчеркнул. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 18:28 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, авторНу и да, так просто кастовать безнаковые к большему типу нульзя ((( знаковый бит размножаться будет (поэтому его потом через AND зачищают) Ну да. long var = (((long)b3 & 0xff) << 24) | (((long)b2 & 0xff) << 16) | (((long)b1 & 0xff) << 8) | (((long)b0 & 0xff) )); Осталось понять, нет ли здесь подвоха) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 18:31 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
авторВ дополнительной кодировке старший бит не имеет сакрального смысла - (без)знаковость проявляется в конкретных операциях. Я честно говоря не очень понял(мне нужно 4 байта в long преобразовать как unsigned с точки зрения, что в int большое число может не влезть(как раз из-за того что под знак часть места отводится в int)) Сорян, если туплю. Надо будет почитать про дополнительный код. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 18:34 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
mr_virtusЯ честно говоря не очень понял(мне нужно 4 байта в long преобразовать как unsigned с точки зрения, что в int большое число может не влезть(как раз из-за того что под знак часть места отводится в int))Четыре байта это int. Если вы хотите преобразовать его в long как unsigned int, то возможно (ненужное) расширение знака. Расширение знака "тривиально обнуляется" или битовой маской или двумя сдвигами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 18:59 |
|
Прочитать 4 байта как unsigned в long
|
|||
---|---|---|---|
#18+
И, как обычно, до начала велосипедостроительных работ полезно заглянуть в документацию . ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 19:07 |
|
|
start [/forum/topic.php?fid=59&fpage=28&tid=2121329]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 162ms |
0 / 0 |