Не могу переписать XOR с C на Java

314
13 октября 2017, 13:47

Здравствуйте, переписываю XOR с языка C на Java

C:

#include <stdint.h>
#include <string.h>
#include <stdio.h>
static const uint8_t KEY [] = {23,45,67,84,34,32,56,78,45,67,89,23,45,67,89,34,5,6,45,34,35,0};
int main(int ac, char **av) {
if(ac > 0) {
    printf("{");
    int i = 0, j = 0;
    for(i=0;i<strlen(av[1]);i++) {
        if(KEY[j] == 0) j = 0;
        char c = av[1][i] ^ KEY[j++];
        printf("0x%02X,",c);
    }
    printf("0}\n");
}
return 0;
}

Запутался, как сделать аналогию в строчке

char c = av[1][av] ^ KEY[j++];

На данный момент на Java код такой:

public class Main {
private static char[] KEY = {23,45,67,84,34,32,56,78,45,67,89,23,45,67,89,34,5,6,45,34,35,0};
public static void main(String[] args) {
    System.out.println("Input: ");
    String text = new Scanner(System.in).next();
    System.out.print("{");
    int j = 0;
    for (char textChar : text.toCharArray()) {
        if (KEY[j] == 0) j = 0;
        char c = textChar ^ KEY[j++];
        System.out.print(String.format("0x%02X,", c));
    }
    System.out.print("0}\n");
}
}
Answer 1

Операция XOR присутствует в Java и обозначается точно также как и в Си ^, оно вернёт int, а его необходимо приводить к char в отличии от Си. Для вывода значения в String.format необходимо подогнать размер выводимого значения.

public static void main(String[] args) {
    System.out.println("Input: ");
    String text = new Scanner(System.in).next();
    System.out.print("{");
    int j = 0;
    for (char textChar : text.toCharArray()) {
        if (KEY[j] == 0) j = 0;
        int c = textChar ^ KEY[j++];
        System.out.print(String.format("0x%02X,", c & 0xFF));
    }
    System.out.print("0}\n");
}
READ ALSO
Динамическое создание конструктора

Динамическое создание конструктора

В Java программе необходимо создать объект, но заранее не известно сколько и какие поля будут участвовать в конструктореЕсть ли возможность...

396
Конвертация Map в объект через Jpa

Конвертация Map в объект через Jpa

Есть Map<String, Object> с полями объектаНужно конвертировать эту мапу в объект так как это сделал бы Hibernate, используя колонки @Column(name="

294
Посчитать средний и общий бал

Посчитать средний и общий бал

Есть такой вот код, в условиях задачи сказано: Display the average and total rating of all student

264
Ошибочная сериализация полей с Gson

Ошибочная сериализация полей с Gson

У меня в обьекте есть поле:

237