博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#对二进制文件的特定位置进行读写小结
阅读量:7014 次
发布时间:2019-06-28

本文共 2170 字,大约阅读时间需要 7 分钟。

虽然网络上关于“C#对二进制文件进行读写”的文章多如牛毛,但具体到自己要处理的问题时,难免让人产生“书到用时方恨少”和“纸上读来终觉浅”的感觉。我现在感觉要真正解决自己的问题,最终还是要靠自己下功夫。 

 

实例一:将数值写入文件的特定位置

String saveFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要保存的文件    FileStream writeStream = File.OpenWrite(saveFile);// 以写的方式打开    int value = 123456;// 要写入的数值    String strAll = value.ToString("x8");// 转成16进制 // 下面是特定处理,个性化需求,不完善勿怪    String strA = strAll.Substring(strAll.Length - 2, 2);    String strB = strAll.Substring(strAll.Length - 4, 2);    String strC = strAll.Substring(strAll.Length - 6, 2);    byte[] newData = new byte[3];    newData[0] = Convert.ToByte(strA, 16);    newData[1] = Convert.ToByte(strB, 16);    newData[2] = Convert.ToByte(strC, 16);    writeStream.Seek(44, SeekOrigin.Begin);// 定位,在第44个字节处写入    writeStream.Write(newData, 0, newData.Length);// 将准备好的数组写入文件。newData是包含要写入文件的byte类型数组;0是数组中的从零开始的字节偏移量,从此处开始将字节复制到该流;newData.Length是要写入的字节数。这句话的意思是从44个字节开始把数组内容从头到尾写进去,修改下参数如writeStream.Write(newData, 1, newData.Length-1)是把数组从第二个到倒数第一个写进去
writeStream.Close();// 关闭文件

 

实例二:读取文件的特定位置,得到数值

String openFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要读取的文件    FileStream fs = new FileStream(openFile, FileMode.Open);// 读取方式打开,得到流    fs.Seek(44, SeekOrigin.Begin);// 定位到第44个字节    byte[] datas = new byte[3];// 要读取的内容会放到这个数组里    fs.Read(datas, 0, datas.Length);// 开始读取,读取的内容放到datas数组里,0是从第一个开始放,datas.length是最多允许放多少个 // 下面是个性化处理,不完善勿怪    int a = datas[2];    String strA = Convert.ToString(a, 16);    if (strA.Equals(""))    {        strA = "00";    }    if (strA.Length == 1)    {        strA = "0" + strA;    }    a = datas[1];    String strB = Convert.ToString(a, 16);    if (strB.Equals(""))    {        strB = "00";    }    if (strB.Length == 1)    {        strB = "0" + strB;    }    a = datas[0];    String strC = Convert.ToString(a, 16);    if (strC.Equals(""))    {        strC = "00";    }    if (strC.Length == 1)    {        strC = "0" + strC;    }    String strD = strA + strB + strC;    int point = Convert.ToInt32(strD, 16);// 十六进制转十进制    System.Console.WriteLine("value=" + point);// 这里输出value=123456,也就是上面写入程序写进去的值

 '

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/7000258.html,如需转载请自行联系原作者

你可能感兴趣的文章
List集合就这么简单【源码剖析】
查看>>
Spring Cloud (十四):Spring Cloud 开源软件都有哪些?
查看>>
前端状态管理与有限状态机
查看>>
读Zepto源码之Data模块
查看>>
Redux助力美团点评前端进阶之路
查看>>
【闭包概念】关于闭包概念不同解读——你可以自己理解。
查看>>
More-iOS国际化一站式解决方案
查看>>
BCH一周年:从硬分叉到顺风顺水
查看>>
数据结构和算法面试题系列—排序算法之快速排序
查看>>
打破行业壁垒!阿里云OpenSearch开启个性化搜索里程碑
查看>>
面试官,你再问我 Bit Operation 试试?
查看>>
PSV 3.60 固化升级到 3.68 破解完全攻略
查看>>
Android 路由框架
查看>>
vue踩坑记- Cannot find module 'wrappy'
查看>>
【实操干货】KVM命令管理虚拟机与性能优化
查看>>
机器学习资料合计(一)
查看>>
webpack由浅入深——(webapck简易版)
查看>>
2 - 建立 Django 博客应用
查看>>
【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
查看>>
UI技术总结--性能优化
查看>>