C# 字节[]操作的实现有问题
我对字节[]使用异或运算C# 字节[]操作的实现有问题,c#,arrays,algorithm,boolean-logic,C#,Arrays,Algorithm,Boolean Logic,我对字节[]使用异或运算 public static byte[] XOR(byte[] buffer1, byte[] buffer2) { for (int i = 0; i < buffer1.Length; i++) buffer1[i] ^= buffer2[i]; return buffer1; } 但下一个代码返回wring结果^ T1 = XOR(W1,(RotHi(W0, n1))); // ed242f26d7e9da27, but s
public static byte[] XOR(byte[] buffer1, byte[] buffer2)
{
for (int i = 0; i < buffer1.Length; i++)
buffer1[i] ^= buffer2[i];
return buffer1;
}
但下一个代码返回wring结果^
T1 = XOR(W1,(RotHi(W0, n1))); // ed242f26d7e9da27, but should be CDFB23D652B779DB
怎么了?问题出在字节顺序上。注意BigeNead或LittleEndian。这和C++有什么关系?显然,你没有在C++中编程,所以请不要添加无关的语言标签。至于你的问题,你是否试过在调试器中逐个地通过代码?你期望的价值观和你得到的价值观何时何地开始偏离?您确定预期值正确吗?你确定你的算法是正确的吗?你使用n1而不是m1,并且只执行第一个异或而不是第二个,所以答案会不同。在你抱怨他们给出了两个不同的答案之前,请把这两个计算等效起来。@Someprogrammerdude不,我没有。但结果T0和W0是正确的,因为它不是等价的,它是不同的变量和不同的运算。但只有第三种结果是错误的(参考是标准的)
W0 = b194bac80a08f53b.
W1 = e12bdc1ae28257ec.
W2 = e9dee72c8f0c0fa6.
m1 = 8; n1 = 53.
T0 = RotHi(W0, m1); // 3bb194bac80a08f5
W0 = XOR(W0,W1);
W0 = XOR(W0,W2); // b96181fe6786ad71
T1 = XOR(W1,(RotHi(W0, n1))); // ed242f26d7e9da27, but should be CDFB23D652B779DB