Я пытаюсь сдвинуть 7-байтовый массив вправо на 7 бит.
Для этого я использую метод shiftright BigInteger. Однако при сдвиге вправо для отрицательных BigInteger добавляется заполнение единицами или иногда удаляется ведущий бит.
Вот следующий фрагмент кода, выполняющий переключение:
byte[] vcwManD = decryptedVCW;
BigInteger bigIntD = new BigInteger(vcwManD); // create big int array for shift
BigInteger shiftIntD= bigIntD.shiftRight(7); // shift right 7 bits
vcwManD = shiftIntD.toByteArray();
Для байтового массива E865037A9C6424 в двоичном формате:
11101000011001010000001101111010100111000110010000100100
При смещении я получаю D0CA06F538C8 в двоичном формате:
110100001100101000000110111101010011100011001000
Как видите, он сдвинулся на 7 бит вправо, однако старший бит был удален.
Другая проблема - отступ 1. Для байтового массива 90998951A37908 в двоичном формате
10010000100110011000100101010001101000110111100100001000
выдает FF213312A346F2 в двоичном формате:
11111111001000010011001100010010101000110100011011110010
На этот раз в начале было добавлено около 7 единиц.
Кто-нибудь знает, как решить эту проблему?
Большое спасибо Шив
BigInteger
для работы с двоичными данными. - person JimmyB   schedule 13.01.2016