Здравствуйте, переписываю 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");
}
}
Операция 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");
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей