You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:02