我最近看到了一种使用 XOR 交换 2 个变量的巧妙方法,并决定在 C# 中使用字符串进行尝试,虽然我设法做到了这一点,但我有点担心在 XOR 操作之后我必须将 int 转换为 byte。这是代码:
var string1 = Encoding.ASCII.GetBytes("Hello world1!");
var string2 = Encoding.ASCII.GetBytes("Hello world2!");
for (var i = 0; i < string1.Length; i++)
{
string1[i] = (byte)(string1[i] ^ string2[i]);
}
for (var i = 0; i < string2.Length; i++)
{
string2[i] = (byte)(string1[i] ^ string2[i]);
}
for (var i = 0; i < string1.Length; i++)
{
string1[i] = (byte)(string2[i] ^ string1[i]);
}
Console.WriteLine(Encoding.ASCII.GetString(string1));
Console.WriteLine(Encoding.ASCII.GetString(string2));
有更好的方法吗?当我们在 C# 中转换基元时,实际上会发生什么?是否有为其分配新的内存?
随着 C# 中元组的引入,xor
技巧实际上不再像以前那么简洁了:
var string1 = Encoding.ASCII.GetBytes("Hello world1!");
var string2 = Encoding.ASCII.GetBytes("Hello world2!");
(string1, string2) = (string2, string1);
Console.WriteLine(Encoding.ASCII.GetString(string1));
Console.WriteLine(Encoding.ASCII.GetString(string2));
元组语法解释于here。