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

Objective-C转C#代码疑问:固件数据块截取逻辑是否正确?

固件数据块处理代码Objective-C转C#的数组长度问题分析

原Objective-C代码逻辑

原代码核心是根据不同条件截取固件数据块,逻辑如下:

NSData *blockData;

if(valid)
{
    if(sendingLast) 
    {
         blockData = rawFirmwareData;
    }
    else 
    {
        int startingPos = (currSensor.firmwareBlockIterator * 
                (ourCurrentSensor.firmwareBlockSize - headerSize));
        blockData = [rawFirmwareData subdataWithRange:NSMakeRange(startingPos, 
                    rawFirmwareData.length - startingPos)];
    }
}
else 
{
    blockData = [rawFirmwareData 
                subdataWithRange:NSMakeRange((currSensor.firmwareBlockIterator * 
               (currSensor.firmwareBlockSize - headerSize)), 
               (currSensor.firmwareBlockSize - headerSize))];   
}

拆解关键逻辑:

  • 当valid为true时:
    • 若sendingLast为true,直接复用完整的rawFirmwareData
    • 若sendingLast为false,截取从startingPos到数据末尾的所有剩余内容(长度为rawFirmwareData.length - startingPos)
  • 当valid为false时,固定截取长度为currSensor.firmwareBlockSize - headerSize的数据块

你的C#代码的问题

你在valid为true且sendingLast为false的分支里,错误地将数组长度设置为currSensor.firmwareBlockSize - headerSize,这和原Objective-C逻辑不符——原逻辑这里是取剩余全部数据,而非固定大小的块。其他分支(valid为false、valid为true且sendingLast为true)的数组处理是符合原逻辑的。

修正后的C#代码

byte[] blockData;

if (valid)
{
    if (sendingLast)
    {
        blockData = rawFirmwareData;
    }
    else
    {
        int blockSizeMinusHeader = currSensor.firmwareBlockSize - headerSize;
        int startingPos = currSensor.firmwareBlockIterator * blockSizeMinusHeader;
        // 计算剩余数据长度,而非固定块大小
        int remainingLength = rawFirmwareData.Length - startingPos;
        blockData = new byte[remainingLength];
        Array.Copy(rawFirmwareData, startingPos, blockData, 0, remainingLength);
    }
}
else
{
    int blockSizeMinusHeader = currSensor.firmwareBlockSize - headerSize;
    int startingPos = currSensor.firmwareBlockIterator * blockSizeMinusHeader;
    blockData = new byte[blockSizeMinusHeader];
    Array.Copy(rawFirmwareData, startingPos, blockData, 0, blockSizeMinusHeader);
}

内容的提问来源于stack exchange,提问作者appym243

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:55:15