【发布时间】:2014-01-15 04:09:39
【问题描述】:
我正在尝试执行两个字节数组的异或运算并将结果作为十六进制字符串返回。我已经将两个字节数组转换为它们对应的二进制字符串。每个字节都有位,因为它有 8 个字节。
byte[] key = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };
byte[] PAN = { 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23 };
到目前为止,我使用了一种将字节数组转换为相应的二进制字符串值的方法,例如“10101010101”。但是,当我执行下面的方法来获取 XOR 时,我会返回一串笑脸,这可能是一些特殊的 ASCII 字符。
但是我不知道如何做到这一点。我正在考虑将二进制字符串转换为整数,但这不是一个好的解决方案,因为它不适合作为整数。
请问您有什么想法吗?可能有一些示例代码?
public static string exclusiveOR(string string_1, string string_2)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < string_1.Length; i++)
sb.Append((char)(string_1[i] ^ string_2[(i % string_2.Length)]));
String result = sb.ToString();
return result;
}
【问题讨论】:
-
看起来您正在计算字符的异或。我认为这仅在您的字符串包含 Char(0) 和 Char(1) 值时才有效。
-
我的字符串只包含 0 和 1 但仍然不起作用
-
它是否包含字符 0 或 Char(0)?因为字符 0 的 ASCII 值是 48。对于 1 也是如此,它是 ASCII 值 49
-
给我们一个示例输入和预期输出的例子。
-
而不是 string_1[i] 使用 Convert.ToInt32(string_1[i],16) 和其他字符的相同转换。并使用 ToString("X") 而不是字符转换将为您提供 HEX 字符串。