Я пытаюсь перевернуть некоторые байты в Java, и функция, которую я имею, работает правильно для некоторых байтов и не работает для других.Ядро зачистки Java от функции
Функция Я использую это:
public static int foldInByte(int m, int pos, byte b) {
int tempInt = (b << (pos * 8));
tempInt = tempInt & (0x000000ff << (pos * 8));
m = m | tempInt;
return m;
}
А код, реализующий это:
byte[] bitMaskArray = new byte[]{
byteBuffer.get(inputIndex),
byteBuffer.get(inputIndex + 1),
byteBuffer.get(inputIndex + 2),
byteBuffer.get(inputIndex + 3)};
int tempInt = 0;
tempInt = foldInByte(0, 3, bitMaskArray[3]);
tempInt = foldInByte(tempInt, 2, bitMaskArray[2]);
tempInt = foldInByte(tempInt, 1, bitMaskArray[1]);
tempInt = foldInByte(tempInt, 0, bitMaskArray[0]);
bitMask = tempInt;
Байты считываются из ByteBuffer с порядком байтов будучи Little Endian.
Например, байты 00 01 B6 02 устанавливают битMask на: 2B60100 - который отлично работает в моей программе.
Однако, если байты A0 01 30 00, битмаск установлен в значение: 3001A0 - который зацепил последний ноль из битовой маски.
Есть ли способ, которым я могу остановить Java от обрезки задних нулей?
Надеюсь, это имеет смысл.
Благодаря
Tony
Что вы подразумеваете под словом? В первом случае один ноль также «отключен» (2B60100 вместо 02B60100), но, по правде говоря, в обоих случаях ведущие (незначительные) нули просто не печатаются при выводе маски. Внутренне это все равно 32-битное целое со всеми ведущими нулями. Или я полностью не понимаю ваш вопрос? Кстати, какова точка второй строки в foldInByte()? –
Если я жестоко честен, я не понимаю, как работает эта функция. Я пытаюсь переставить байты на Java, чтобы они читали определенный путь как unsigned int, и мне сказали, что это один из способов сделать это. Когда я говорю «зачищающие нули», я имею в виду, что в конце числа, которое мне нужно, когда я использую его как бинарный битмаск/бит-массив, нет нуля. – Tony