C#Binary类二进制文件读写转换

需要创建BinaryWriter类对象 进行写入

需要创建BinaryReader类对象 进行读取

需要创建两个FileStream类对象 进行读 和写

代码如下 《====》

C# Java项目实战经验汇总请查看 www.aolanghs.com 点击我跳转

try
            {
                fs_read = new FileStream(filePath_read, FileMode.Open, FileAccess.ReadWrite);  //创建文件对象设置读写参数
                br = new BinaryReader(fs_read);         //创建二进制读取对象设置参数

                fs_write = new FileStream(filePath_write, FileMode.Create, FileAccess.ReadWrite); //创建文件对象设置写入参数
                bw = new BinaryWriter(fs_write);

                byte[] final_data = new byte[16];  
                long filenum = br.BaseStream.Length;  //文件中有多少个字节数
                long index_sum = 0; //循环读取次数的初值
                long count_sum = 0; //循环读取次数的终值
                long big = 0;   //最后一个坐标读取适当的数据
                int octet = 0; //不满足于16的时候 盛放
                int multiple = int.Parse(Convert.ToString(0xff, 10)) / int.Parse(textBox1.Text);  //用0xff除以获取文本框上的数字获取倍数

                if (filenum / 16 != 0)    //判断当前文件是否有数据
                {
                    if (filenum % 16 == 0)  //如果字节数除以16能整除
                    {
                        count_sum = filenum / 16;
                    }
                    else   //如果不能整除
                    {
                        count_sum = filenum / 16;
                        count_sum++;
                        big = count_sum;   //最后一个坐标存入临时变量
                        octet = (int)(filenum % 16); //存放最后一行的字节数
                    }
                    while (index_sum < count_sum)  //外循环 根据文件有多少行就循环多少次   每循环一次处理文件中的一行处理
                    {
                        byte[] temporary_data = new byte[16];     //放 旧文件数据    一行一行处理
                        if (index_sum == big - 1)
                        {
                            br.Read(temporary_data, 0, octet);
                        }
                        else
                        {
                            br.Read(temporary_data, 0, 16);    //将缓冲区数据读入byte临时数组
                        }
                        for (int i = 0; i < temporary_data.Length; i++) //循环只用作处理 16个字节 和写入列表
                        {
                            if (int.Parse(temporary_data[i].ToString()) * multiple >= 255)  //超出字节长度全部按 放255处理
                            {
                                final_data[i] = 255;
                            }
                            else //符合 放大51倍放入另一个yuv文件
                            {
                                byte[] temporary = BitConverter.GetBytes(int.Parse(temporary_data[i].ToString()) * multiple);  //换算之后的数据转换 放入临时数据中
                                final_data[i] = temporary[0];
                            }
                        }
                        if (final_data.Length >= 16)  //如果列表中元素大于等于16  写入新文件
                        {
                            bw.Write(final_data);
                            final_data = new byte[16];  //清楚所有元素 做一次初始化
                        }
                        index_sum++;
                    }
                    MessageBox.Show("转换已完成");
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                //释放资源收尾工作
                br.Dispose();
                br.Close();
                bw.Dispose();
                bw.Close();
            }

以上代码绝无任何报错bug运行不了情况

有任何不懂的请留言,超过2小时没回复请私聊QQ:2773938492 推广一下个人学习网站 www.aolanghs.com 首页内附开发必备的框架资源导航 菜单栏顶部是我软件+网站的项目实战经验

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值