@supreme19

Как сделать циклический сдвиг битов в байте влево или вправо?

Делаю программу для шифрования текста, нужно использовать побитовые сдвиги в байте, без потери информации.Никак не выходит, подскажите пожалуйста что делаю неверно!
package z;

import java.util.Scanner;

public class Main {

//    static byte right(byte a, byte s) {
//        s %= 8;
//        return  (byte)((a >> s) | (a << (8 - s)));
//    }

//
//    static int left(byte a, int s) {
//        return (byte)((a << s) | (a >> (8 - s)));
//    }
    private static byte rigth(byte a, byte s) {
    s %= 8;
    return  (byte)((a >> s) | (a << (8 - s)));
}
    private static byte left(byte a, byte s) {
        s %= 8;
        return  (byte)((a >> s) | (a << (8 - s)));
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); // .useDelimiter("\\s+");
        System.out.println("enter line:");
        String line = in.next() + in.nextLine();
        System.out.println("enter key:");
        int pwd = in.nextInt();
        byte[] chars = line.getBytes();            // символы строки
        String encrKey = Integer.toBinaryString(pwd); // перекодированный ключ
        System.out.println(encrKey);
        for (int i = 0; i < chars.length; i++) {
            String keyPart = new StringBuilder().     // фрагмент ключа из смежных символов в виде строки
                    append(encrKey.charAt(i % encrKey.length())).       // i % encrKey.length() не выходит за границы массива
                    append(encrKey.charAt((i + 1) % encrKey.length())). // после перебора символов начинает с начала ключа
                    toString();
            switch (keyPart) {
                case "10":
//                    System.out.println(chars);
//                    System.out.println("left");
//                    System.out.println(chars[i]);
//                    chars[i] = (byte)(chars[i] >> 1);
//                    System.out.println(chars[i]);
                    System.out.println(chars[i]);
                    System.out.println("now right");
                    System.out.println(chars[i]);
                    chars[i] = rigth(chars[i], (byte)1);
                    System.out.println("now left");
                    chars[i] = left(chars[i], (byte)1);
//                    chars[i] = (byte)((int)Integer.rotateRight(chars[i] >> 1,1));
//                    chars[i]  = right(chars[i],1);
                    System.out.println(chars[i]);


                    break; // циклический сдвиг (обратимый)
                case "01":
//                    System.out.println("rigth");

//                    chars[i] = (char) Integer.rotateRight((int) chars[i], 1);

                    break;
                case "11":
//                    chars[i] = (char) ~chars[i];
                    break;

            }
        }
    }


}
  • Вопрос задан
  • 876 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
29 мар. 2024, в 15:28
10000 руб./за проект
29 мар. 2024, в 15:11
50000 руб./за проект
29 мар. 2024, в 15:06
50000 руб./за проект