C#中如何更新数组值?遇仅保留4字节问题求助
问题分析与解决方案
你的问题核心出在两个关键错误上:
- 每次处理后用
BitConverter.GetBytes(t)直接替换了整个iarray,导致原本的完整数组被覆盖成仅4字节的新数组,最终写入文件的自然只有这4字节数据。 - 循环步长逻辑混乱,
i++叠加i+=3容易引发索引越界或遗漏处理,不符合4字节数据块的遍历需求。
修正后的代码
byte[] iarray = File.ReadAllBytes(path); uint t; // 从索引61开始,按UInt32的4字节长度步进,直到索引小于3440 for (int i = 61; i < 3440; i += 4) { t = BitConverter.ToUInt32(iarray, i); if (t > 0) { t += 96; } // 将修改后的4字节数据写回原数组的对应位置,而非替换整个数组 byte[] modifiedBytes = BitConverter.GetBytes(t); Array.Copy(modifiedBytes, 0, iarray, i, modifiedBytes.Length); } File.WriteAllBytes(path, iarray);
关键修改说明
- 保留原数组结构:使用
Array.Copy将修改后的4字节数据写回原数组的指定索引位置,确保文件中其他未处理的字节不会被丢失或覆盖。 - 修正遍历步长:直接设置
i += 4,匹配UInt32类型的4字节长度,精准遍历需要处理的每个数据块,避免原代码的步长混乱问题。
内容的提问来源于stack exchange,提问作者skare__.
相关产品推荐
相关产品推荐

