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

使用C#查找MPEG文件的I帧宏块数据并进行XOR处理

没问题,我来帮你搞定这个MPEG文件I帧宏块的XOR处理需求,用FileStream来实现文件读写的完整方案如下:

实现思路
  • 用FileStream读取原始MPEG文件的全部字节数据,同时创建目标文件的FileStream用于写入结果
  • 解析MPEG文件的帧结构,定位I帧(MPEG标准中I帧的起始码为0x00 0x00 0x01 0x00)
  • 对I帧范围内的宏块字节数据执行XOR异或修改(可自定义异或密钥)
  • 将修改后的字节数据写入新文件,确保资源正确释放
完整代码实现
private void button4_Click(object sender, EventArgs e)
{
    // 定义XOR密钥,可根据需求修改
    byte xorKey = 0xAA;
    string sourcePath = textBox1.Text;
    string targetPath = textBox2.Text;

    // 使用using语句自动管理FileStream资源,避免内存泄漏
    using (FileStream fsRead = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
    using (FileStream fsWrite = new FileStream(targetPath, FileMode.Create, FileAccess.Write))
    {
        long fileSize = fsRead.Length;
        byte[] fileBytes = new byte[fileSize];
        // 读取整个文件到字节数组
        fsRead.Read(fileBytes, 0, (int)fileSize);
        Console.WriteLine("开始处理文件...");

        // 遍历字节数组,寻找I帧起始码并处理
        for (int i = 0; i < fileSize - 3; i++)
        {
            // 检测MPEG I帧起始码:0x00 0x00 0x01 0x00
            if (fileBytes[i] == 0x00 && fileBytes[i+1] == 0x00 && fileBytes[i+2] == 0x01 && fileBytes[i+3] == 0x00)
            {
                Console.WriteLine($"找到I帧,起始位置:{i}");
                // 从I帧起始码后第4个字节开始处理,直到下一个帧起始码
                int currentPos = i + 4;
                while (currentPos < fileSize - 3)
                {
                    // 检测是否到达下一个帧的起始码(所有MPEG帧起始码都是0x000001xx)
                    if (fileBytes[currentPos] == 0x00 && fileBytes[currentPos+1] == 0x00 && fileBytes[currentPos+2] == 0x01)
                    {
                        break;
                    }
                    // 对当前字节执行XOR操作
                    fileBytes[currentPos] ^= xorKey;
                    currentPos++;
                }
                // 跳过已处理的I帧范围,避免重复检测
                i = currentPos - 1;
            }
        }

        // 将修改后的字节数组写入目标文件
        fsWrite.Write(fileBytes, 0, fileBytes.Length);
        Console.WriteLine("文件处理完成!");
    }
}
关键细节说明
  • 资源管理:使用using语句包裹FileStream,确保文件流在使用后自动关闭和释放资源,避免文件占用问题
  • I帧检测逻辑:MPEG的帧起始码格式为0x00 0x00 0x01 xx,其中xx=0x00对应I帧,这个是标准的MPEG-1/2帧起始标识
  • XOR处理范围:从I帧起始码结束的位置开始,直到下一个帧起始码前的所有字节都视为I帧的宏块数据,执行异或操作
  • 读写效率:小文件采用一次性读取整个文件到字节数组的方式更高效;如果是超大文件,建议分块读取处理,避免内存占用过高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:45