我在C中有这个代码,我需要移植到C#:
void CryptoBuffer(unsigned char *Buffer, unsigned short length)
{
unsigned short i;
for(i=0; i < length; i++)
{
*Buffer ^= 0xAA;
*Buffer++ += 0xC9;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
public void CryptoBuffer(byte[] buffer, int length)
{
for(int i = 0; i < length; i++)
{
buffer[i] ^= 0xAA;
buffer[i] += 0xC9;
}
}
Run Code Online (Sandbox Code Playgroud)
但结果与预期不符.
根据这个例子,这个:
A5 03 18 01...
Run Code Online (Sandbox Code Playgroud)
应该成为这样的:
A5 6F 93 8B...
Run Code Online (Sandbox Code Playgroud)
它还说第一个字节没有加密,所以这就是A5保持不变的原因.
编辑澄清:规范只是说你应该跳过第一个字节,它没有详细说明,所以我猜你只是将序列从位置1传递到最后一个位置跳过第一个字节.
但是我对C#端口的结果是:
A5 72 7B 74...
Run Code Online (Sandbox Code Playgroud)
这个端口是正确的还是我错过了什么?
编辑2:为了进一步澄清,这是一个封闭的协议,所以我不能详细说明,这就是为什么我提供了足够的信息来帮助我移植代码,C代码是给我的那个,那就是规范说它会做什么.真正的问题是规范中的"0xAA"是错误的,这就是输出不是预期的原因.这里提供的C#代码和接受的答案毕竟是正确的.