C#实现int拆分short、byte及反向合并的代码运行异常问题
代码存在以下几处错误:
1. 操作索引不匹配
你所有增量操作的目标都是下标为0的Bank:
IncrementCommandCounter(0, true, true); // 其余增量调用也都是Bank 0
但后续读取操作的目标是下标为2的Bank,正常情况下未操作过的Bank2所有值都应为0,你现在读取到非0值首先就是调用索引不对应导致的,测试时需保证读写的Bank下标一致。
2. 数组越界风险
如果_CommandCounters数组的长度小于3,你访问下标2时会产生越界,操作Bank0的值可能意外污染Bank2的内存数据,这也是你能从Bank2读取到数值的核心原因,需先保证数组长度足够容纳所有用到的Bank下标。
3. 字重构逻辑错误
你在重构short类型的高低字时,高低字节的移位逻辑完全颠倒:
原错误代码:
// 重构低字错误 loWord = (short)((loByte1 << 8) | hiByte1); // 重构高字错误 hiWord = (short)((loByte2 << 8) | hiByte2);
高字节需要左移8位放到高位,低字节直接保留在低位,修正后:
// 重构低字 loWord = (short)((hiByte1 << 8) | loByte1); // 重构高字 hiWord = (short)((hiByte2 << 8) | loByte2);
4. 整数值合并逻辑错误
你在合并高低字为int类型时,高低字的位置也完全颠倒,低字应该放在int的低16位,高字放在int的高16位:
原错误代码:
_CommandCounters[iCommandBank] = ((loWord << 16) | (hiWord & 0xffff));
修正后:
_CommandCounters[iCommandBank] = ((hiWord << 16) | (loWord & 0xffff));
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

