Java Элементарный редактор Hex - Назначение программирования - PullRequest
1 голос
/ 18 февраля 2020

Я пишу элементарный шестнадцатеричный редактор для задания в школе. У меня это сделано примерно на 90%, однако я не могу понять, как назначить новое значение байта для уже существующего значения байта. По сути, я спрашиваю пользователя, хочет ли он / она изменить байт в позиции, которую он указывает (ранее в коде). Если они выбирают «да», то им нужно будет ввести новое значение HEX, чтобы перезаписать значение в позиции. Пока у меня есть это:

System.out.print("Would you like to edit the byte at this position?(y/n): ");
            String choice;
            choice = in.nextLine();
            if ("y".equals(choice)){
                System.out.print("Enter the new hex value: ");
                String hv = in.nextLine();
                int i = Integer.decode("0x" + hv);

Здесь я не могу понять, как затем поместить значение, которое они вводят, в соответствующую позицию.

Вот предыдущий код, который устанавливает позиция, которую пользователь указывает:

        System.out.print("Enter byte positon to navigate to: ");
        long loc = in.nextLong(); in.nextLine();           
        if (loc >= 0 && loc < fileList.size()) {
            ListIterator<Byte> lit = fileList.listIterator((loc - 5 >= 0)?(int)(loc-5):0);
            int start = lit.nextIndex();
            System.out.println("The surrounding 5 bytes (left and right) are: ");
            while (start <= loc+5 && start < fileList.size()){
                if (start == loc){
                   System.out.print(" ( ");
                }
            byte b = lit.next();
            System.out.print(((b >= 0 && b <= 15)?"0":" ") + Integer.toHexString((int)b & 0x00FF) + " ");
            if (start == loc)
                System.out.print(" ) ");
            System.out.print(" ");
            start++;

            }

Любая помощь на всех приветствуется. Спасибо.

1 Ответ

0 голосов
/ 18 февраля 2020

Если я правильно понимаю, ваш fileList содержит каждый байт открытого файла. Вот как вы извлекаете выбранные байты как минимум.

Поэтому, возможно, вы можете использовать метод set() для изменения байта fileList (https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#set (E) )

Я думаю, вам нужно go с правильным смещением, позвоните next(), чтобы получить его, а затем позвоните set(), чтобы определить, правильно ли я понимаю документы.

После того, как вы Выполнив эту операцию, байт, вероятно, изменяется только в памяти, и вам все равно нужно будет записать их на диск, если вы хотите сохранить их.

...