字符之间的xor操作

时间:2014-03-26 13:31:29

标签: java eclipse encryption xor

我有以下Java代码,在Eclipse,Windows 7,变量' xoredChar'根本没有显示任何价值,不是空,不是'',没有。

char xoredChar = (char) (stringA.charAt(j)^stringB.charAt(j));

为什么?我需要了解如何在java中的两个字符之间执行此xor操作。我错过了什么?

3 个答案:

答案 0 :(得分:3)

好吧,如果字符串相等,你就会得到一个不是可打印字符的\0。试试这样的事情,

String stringA = "A";
String stringB = "A";
int j = 0;
char xoredChar = (char) (stringA.charAt(j) ^ stringB.charAt(j));
System.out.printf("'%c' = %d\n", xoredChar, (int) xoredChar);

输出

' ' = 0

答案 1 :(得分:0)

如果stringAstringB相同,则XOR操作将产生xoredChar = 0

在大多数情况下,0可能在IDE中显示为0,因为0用作字符串终止符。

答案 2 :(得分:0)

正如其他答案所提到的,xoring相同的字符会产生\0值,该值没有可视化表示。 Perhapse你对一个小应用程序感兴趣,它可以让你知道XOR如何在你的字符串上运行:

public class Example {
    public static void main(String[] args) {
        String a = "abcde";
        String b = a;
        for (int idx = 0; idx < b.length(); idx++) {
            System.out.printf("xoring <%s> [%s] with <%s> [%s]\n",
                    a.charAt(0), toBinaryString(a.charAt(0)),
                    b.charAt(idx), toBinaryString(b.charAt(idx)));
            int c = (a.charAt(0) ^ b.charAt(idx));
            System.out.printf("result is <%s> [%s]\n",
                    (char) c, toBinaryString(c));
        }
    }
}

玩得开心!