2014-01-13 2 views
0

Я пытаюсь выполнить некоторые домашние задания и полностью в тупике. Функция, которую мне нужно выполнить, определяется шестнадцатеричным значением символа, xor с другим шестнадцатеричным значением, чтобы проверить известное конечное значение.XOR hex ascii значения букв

Давая простой пример (тот, который мне дал), я знаю, что значение ascii «Боба» будет [42,6F, 62], а «Eve» будет [45,76,65]. У меня есть значение XOR 'Bob' с [07,16,17], чтобы получить «Eve».

Я думал, что xor просто добавляет модульную базу, но просто использует калькулятор Microsoft: (42 + 45) mod 16 = 3, но 42 XOR 45 = 7. Я не понимаю, как иначе будет выполняться функция XOR. Может кто-нибудь объяснить?

Заранее спасибо

Я попытался

float l = (6F)^(16); 
System.out.println(l); 

и получил это исключение:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - bad operand types for binary operator '^' 
    first type: float 
    second type: double 
    at p2p_example.P2P_Example.main(P2P_Example.java:40) 
Java Result: 1 

ответ

1

XOR является побитовое исключающее или,

42 = 1000010 
45 = 1000101 

7 = 0000111 

Это один, если один (и только один) один из двух бит является XORd. Для Java, вы можете использовать parseInt и передать в радиксе, например

public static void main(String[] args) { 
    int a = Integer.parseInt("42", 16); 
    int b = Integer.parseInt("45", 16); 
    System.out.println(Integer.toString(a^b, 16)); 
} 

отпечатки

7 
+0

Так что лучше преобразовать в двоичный код для выполнения XOR. В основном я использую Java, как использовать java для реализации двоичной (или шестнадцатеричной) xor-функции? Насколько я знаю, система номеров Java работает только с базой 10 – YazanLpizra

+0

XOR - это то же самое, независимо от того, что такое база. Числа имеют одинаковое значение независимо от того, как они представлены. Нет такой функции, как «двоичная xor» функция. –

+1

@yazan Я отредактировал свой ответ, чтобы включить Java-код; если бы вы пометили свой вопрос Java, во-первых, я бы разместил это раньше. –

1
0x42 + 0x45 = 0x87 
      = 135 

135 % 16 = 7 = 0x07 

Я думаю, вы получаете путать между шестнадцатеричным и десятичными основаниями (хотя (42+ 45)% 16 также бывает 7 в десятичной форме, так что, возможно, вы просто делаете свою математику неправильно?)

Смежные вопросы