C#对二进制数据进行拼接平移补位,并用BinaryWriter写入文件中
2016-08-18 15:18
381 查看
这几天的工作是将从硬件中读出的数据“清洗”以后输出到文件中。硬件中的数据都是以0101这种形式储存的,而每两个byte是一组,在这16位的二进制数据中,前11位为数据,后5位为校验位。所谓的“清洗”就是将这两个Byte中的校验位去掉,恢复为11位bit并写入文件中。
因为BinaryWriter是按照字节写入,所以最终笔者也将数字一个Byte一个Byte的写入了。关于二进制的数据的直接操作笔者没有找到,所以将其转换为string即字符串类型,这样补位之类的操作就简单了很多。平移是在数据层面完成的,而补位等是在字符串层面完成的。以下为完整代码,已经跑通,希望能给同为初学者的大家一点帮助。
因为BinaryWriter是按照字节写入,所以最终笔者也将数字一个Byte一个Byte的写入了。关于二进制的数据的直接操作笔者没有找到,所以将其转换为string即字符串类型,这样补位之类的操作就简单了很多。平移是在数据层面完成的,而补位等是在字符串层面完成的。以下为完整代码,已经跑通,希望能给同为初学者的大家一点帮助。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication2 { class Program { public static String DataStr = ""; public static void CreatFile() { if (File.Exists("mydata.bin")) //判断文件是否已经存在 { //fs =new FileStream ("mydata.bin", FileMode.Open); File.Delete("mydata.bin"); //存在则删除原文件 var myfile=File.Create("mydata.bin");//创建新文件 myfile.Close(); } else { var myfile = File.Create("mydata.bin");//否则直接创建文件 myfile.Close(); } } public static string DataConvToStr(byte[] array, int length) { ushort unit = 0; //采用16位的数据类型来拼接两个Byte string OutPutStr = ""; for (int a = 0; a < length; a = a + 2) { unit = 0; unit = (ushort)(unit ^ array[a]); //将array[a]赋给unit的低8位 unit = (ushort)(unit << 8); //unit的低8位移动到高8位 unit = (ushort)(unit ^ array[a + 1]); //在array[a+1]赋给unit的低8位 //Console.Out.WriteLine(Convert.ToString(unit, 2)); //以二进制输出unit unit = (ushort)(unit >> 5); OutPutStr += System.Convert.ToString(unit, 2).PadLeft(11, '0'); //在转换成字符串时会自动将前面的0去掉,这样会在数据拼接时产生错误 //但是须知数据应该为11位,所以将左边高位补零 //OutPutStr1 += System.Convert.ToString(unit, 2).PadLeft(16, '0'); } return OutPutStr; } public static bool StrToByte() { int ByteLen = DataStr.Length % 8 == 0 ? DataStr.Length / 8 : (DataStr.Length / 8) + 1; //判断得到的数据需要写入的Byte数 int i = 0; byte DataByte = 0; DataStr = DataStr.PadRight(ByteLen * 8, '0'); //因为得到的二进制数字符串不一定是Byte的整数倍,将其后面补0 for (i = 0; i < ByteLen * 8; i = i + 8) { string SubString = DataStr.Substring(i, 8); //每8位字符串截取出来作为一个Byte的值 DataByte = Convert.ToByte(SubString, 2); //将字符串转换成相应的Byte值 FileStream fs = new FileStream("mydata.bin", FileMode.Append); BinaryWriter bw = new BinaryWriter(fs); try { bw.Write(DataByte);//将字符串写入文件 } catch (IOException e) { // Console.WriteLine(e.Message + "Cannot write to file."); return false; } bw.Close(); //及时关闭句柄,否则多次调用时会报错"文件已被占用" fs.Close(); } return true; } static void Main(string[] args) { byte[] array = { 0xFF, 0x00, 0xFF ,0x00,0xFF,0x00}; CreatFile(); DataStr = DataConvToStr(array, array.Length); if (StrToByte()) { Console.WriteLine("Success!"); } else { Console.WriteLine("error!"); } Console.ReadLine(); } } }
相关文章推荐
- 【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中
- asp.net(c#)如何读取上传过程中的.txt文件中的数据,并将其写入数据库的
- 利用二进制数据的XOR(异或)运算进行加/解密(C#版)
- .NET下对二进制文件进行加密解密(C#)
- java中使用JXL对Excel文件进行数据的写入、导出操作
- .NET下对二进制文件进行加密解密(C#)
- C# 向数据中存储和读取二进制文件!!
- C#使用WINAPI进行读取写入配置文件_C#【编程联盟】
- c#文件写入与获取post请求数据
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件
- [转].NET下对二进制文件进行加密解密(C#)
- 关于把图片存入ACCESS形成二进制文件进行图片绑定显示(c#版)
- c# 使用WINAPI 进行读取写入配置文件
- C# 向数据中存储和读取二进制文件!!
- C# 使用WINAPI 进行读取写入配置文件
- C# 写入二进制文件
- .NET下对二进制文件进行加密解密(C#)
- c#写入注册表,读取注册表。使用二进制数据
- 如何使用 ASP.NET 和 Visual C# .NET 向浏览器写入二进制文件
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件