Зашифровать сообщение нулями по условию

Мне нужно зашифровать сообщение нулями используя ASCII (7 бит). Метод public static String input(Scanner scanner) используется для преоброзования сообщения в технологию ASCII (7 бит).

Условие: Если человек введёт букву, например, C (англ. версия) - в 7-ми битном представлении это будет 1000011. Это 7-ми битное значение передаётся в конструктор public class SecurityType. Мне нужно что б соблюдалось условие ниже:

  • 00 0 (ноль в изначальном сообщении соответствует «00» в первом блоке; единственный ноль во втором блоке означает, что этот бит в последовательности один)
  • 0 0 (единица в изначальном сообщении соответствует «0» в первом блоке; в последовательности этот бит один, поэтому во втором блоке один ноль)
  • 00 000 (ноль в изначальном сообщении соответствует «00» в первом блоке; три нуля во втором блоке означает, что последовательность состоит из трех битов)
  • 0 000 (единица в изначальном сообщении соответствует «0» в первом блоке; три нуля во втором блоке означает, что последовательность состоит из трех битов)

Тобишь на выходе должно быть: 0 0 00 0000 0 00, но на данный момент у меня 0 0 00 000

Ещё раз (в примере приведу последовательность из 2-ух битов):

  • Если идёт сочетание 10, то на выходе 0 0 00 0
  • Если идёт сочетание 01, то на выходе 00 0 0 0
  • Если идёт сочетание 11, то на выходе 0 00
  • Если идёт сочетание 00, то на выходе 00 00

Вот мой код:

public class SecurityType {
    private final String INPUT_LINE;
    private String result = "";

    public SecurityType(String line) {
        this.INPUT_LINE = line;
    }

    public void generateSecurityMessage() {
        int stepUp = 1;
        int stepDown = 0;

        for (int i = 0; i < INPUT_LINE.length()-1; i++) {
            byte o1 = Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i)));

            boolean checkZero = false;
            boolean checkOne = false;

            if (Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i))) == Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i + 1)))) {
                stepUp++;
            } else {
                for (int j = stepDown; j < stepUp; j++) {
                    byte o2 = Byte.parseByte(String.valueOf(INPUT_LINE.charAt(j)));
                    if (o1 == o2 && o1 == 0 && !checkZero) {
                        result += " 00 0";
                        checkZero = true;
                    } else if (o1 == o2 && o1 == 0 && checkZero) {
                        result += "0";
                    } else if (o1 == o2 && o1 == 1 && !checkOne) {
                        result += " 0 0";
                        checkOne = true;
                    } else {
                        result += "0";
                    }
                }
                stepDown = stepUp;
            }
        }
    }

    public void printResult() {
        System.out.println(result);
    }
}

import java.util.Scanner;

public class Test {
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        SecurityType securityType = new SecurityType(input(scanner));
        securityType.generateSecurityMessage();
        securityType.printResult();
    }

    public static String input(Scanner scanner) {
        System.out.print("Input your message: ");

        String s = scanner.nextLine();
        byte[] bytes = s.getBytes();
        StringBuilder binary = new StringBuilder();
        for (int j = 0; j < bytes.length; j++) {
            int val = bytes[j];
            for (int i = 0; i < 7; i++) {
                val <<= 1;
                binary.append((val & 128) == 0 ? 0 : 1);
            }
        }

        System.out.println("'" + s + "' to binary: " + binary);

        return binary.toString();
    }
}

Ответы (0 шт):