2013-11-13 3 views
0

Как часть программы, которую я пишу, мне нужно объединить два байта в длинный массив из байтов. Так предполагаю, что это:Объединение байтов в java

byte a[] = new byte[2] 
a[0] = 0b1000111 
a[1] = 0b1111000 

как я могу закрепить их так, что

long b = 0b10001111111000 

EDIT: Программа попытается закрепить в любом месте между 2 байта и 100, только для справки.

+0

Эти два двоичных значения не соответствуют (каждому) в байте. –

+0

@SotiriosDelimanolis: Почему бы и нет? – SLaks

+0

@Slaks '0b10001110' -' 142'. –

ответ

1

Чтобы объединить эти два байта, вам понадобится только 16 бит. Короткий будет достаточно:

short result = (short)(((a[0] & 0xff) << 8) | (a[1] & 0xff)) 

Если по какой-то причине вам нужно тип long данных, вам нужно только заменить отлитой долго.

+0

@GlennLane Как именно это работает? Мне нравится знать, что происходит за решением, прежде чем использовать его. Благодаря! – getynge

+0

@muttstuffle Что это значит, он берет первый байт и сдвигает его так, что это первые 8 бит короткого. Затем мы ИЛИ второй байт с этим, чтобы сделать его последними 8 бит короткого. Итак, у нас есть 16 бит, содержащих оба байта. – Joel

+1

Извините @Joel, ваше решение работает. Разумеется, если a [0] отрицательный (-90 или 0xa6), то (короткий) a [0] дает 0xffa6 (не 0x00a6) ... но вы смещаете эти ff, так что это не имеет значения. Было бы ** важно, если бы вы использовали более широкий тип типа int или long, однако, в котором << 8 даст вам 0xffffa600 для int. –

1

java.nio можно сделать:

ByteBuffer.wrap(a).getShort() 
1

BigInteger может это сделать: http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

BigInteger buffer = new BigInteger(yourByteArray); 
long result = buffer.longValue(); 

Обратите внимание, что если ваш массив имеет значение больше, чем long (например, вы упомянули, что вы могли бы до 100 байт), toLong() вернет только значение байтов нижнего значения. BigInteger, однако, будет обрабатывать любое произвольное количество байтов.

+0

Учитывая добавленное требование хранить до 100 байт, это решение –

Смежные вопросы