使此C#交换字节代码x64兼容
下面是从“Endogine”引擎借用的一段代码。它应该交换任何字节数组的字节顺序:使此C#交换字节代码x64兼容,c#,memory,64-bit,C#,Memory,64 Bit,下面是从“Endogine”引擎借用的一段代码。它应该交换任何字节数组的字节顺序: unsafe protected void SwapBytes(byte* ptr, int nLength) { for(long i = 0; i < nLength / 2; ++i) { byte t = *(ptr + i); *(ptr + i) = *(ptr + nLength - i - 1); *(ptr + nLength - i
unsafe protected void SwapBytes(byte* ptr, int nLength)
{
for(long i = 0; i < nLength / 2; ++i) {
byte t = *(ptr + i);
*(ptr + i) = *(ptr + nLength - i - 1);
*(ptr + nLength - i - 1) = t;
}
}
不安全保护的空交换字节(字节*ptr,整数长度)
{
用于(长i=0;i
当我以x64体系结构为目标时,它似乎失败了,但我不知道为什么,因为没有指向int32的指针。
有什么帮助吗?它以什么方式失败?这似乎很直截了当。我会使用两个指针来加快速度:
unsafe protected void SwapBytes(byte* ptr, int nLength) {
byte* ptr2 = ptr + nLength - 1;
for(int i = 0; i < nLength / 2; i++) {
byte t = *ptr;
*ptr = *ptr2;
*ptr2 = t;
ptr++;
ptr2--;
}
}
不安全保护的空交换字节(字节*ptr,整数长度){
字节*ptr2=ptr+nLength-1;
对于(int i=0;i
然而,编译器非常擅长优化循环和数组访问。执行相同操作的托管代码的性能很可能与不安全代码非常接近:
protected void SwapBytes(byte[] data) {
for(int i = 0, j = data.Length - 1; i < data.Length / 2; i++, j--) {
byte t = data[i];
data[i] = data[j];
data[j] = t;
}
}
受保护的空交换字节(字节[]数据){
对于(inti=0,j=data.Length-1;i
您是否尝试将int类型同时用于nLength和i?还有,您得到的错误是什么?如果您可以在x86和x64上运行特定的字节序列(例如,0x01、0x02、0x03、0x04),并显示不匹配的结果,这将有所帮助。