Я пытаюсь перевернуть несколько байтов в 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 устанавливают битовую маску на: 2B60100 - что прекрасно работает в моей программе.
Однако, если байты имеют значение A0 01 30 00, битовая маска устанавливается на: 3001A0 - что добавило последний ноль из битовой маски.
Можно ли как-нибудь помешать Java сбросить конечные нули?
Надеюсь, это имеет смысл.
Спасибо
Tony