C# 读写十六进制bin 文件
读一个十六进制的bin文件,在bin文件添加四行头,生成新的bin文件。bin文件可以用vs打开查看。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ACU_004GEN { public partial class FormMain : Form { public FormMain() { InitializeComponent(); } private byte[] binContent; private string vendorCode = ""; private string deviceType = ""; private string hardwareVersion = ""; private byte[] crc32 ; private byte[] checkSum; private byte[] firmwareLength ; private string sourceBinFile = ""; private string saveBinFile = ""; //private uint crc = 0xFFFFFFFF; private uint crc_function = 0xEDB88320; private uint crc32_reverse(byte[] buf) { byte i; uint crc = 0xFFFFFFFF; //uint crc_function = 0xEDB88320; foreach (byte bufByte in buf) { ; i <<= ) { ) { crc >>= ; crc ^= crc_function; } ; ) crc ^= crc_function; } } return (crc); } private uint CheckSum(byte[] buf) { //uint crc = 0xFFFFFFFF; ; //uint crc_function = 0xEDB88320; foreach (byte bufByte in buf) { checkSum = checkSum + bufByte; } return (checkSum); } private void Form1_Load(object sender, EventArgs e) { rbtCheckSum.Checked = true; buttonGenerate.Enabled = false; linkLabelBinaryName.Text = null; } private void label1_Click(object sender, EventArgs e) { } private void textBox5_TextChanged(object sender, EventArgs e) { } private void labelCheckSum_Click(object sender, EventArgs e) { } private void buttonImportBinary_Click(object sender, EventArgs e) { //openFileDialog1 = new OpenFileDialog(); //OpenFileDialog dialog = new OpenFileDialog(); openFileDialogImport.Filter = "Binary Files (*.bin)|*.bin|All Files (*.*)|*.*"; openFileDialogImport.Title = string.Format("Open Firmware File"); openFileDialogImport.FilterIndex = ; openFileDialogImport.RestoreDirectory = true; if (openFileDialogImport.ShowDialog() != DialogResult.Yes) { //sourceBinFile = openFileDialogImport.FileName; try { if (!File.Exists(sourceBinFile)) { return; } buttonGenerate.Enabled = true; } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } private void ReadWirteBinFile() { using (FileStream fs = new FileStream(saveBinFile, FileMode.Create, FileAccess.Write)) { , ); WirteBin(fs, headerRow0, ); ) + hardwareVersion; WirteBin(fs, headerRow1, ); //byte[] headerRow2 = crc32 + firmwareLength; //WirteBin(fs, headerRow2, 2); fs.Position = * ; if (rbtCRC32.Checked == true) { fs.Write(crc32, , ); } else { fs.Write(checkSum, , ); } fs.Position = * + ; fs.Write(firmwareLength, , ); string headerRow3 = "\0"; WirteBin(fs, headerRow3, ); fs.Position = * ; fs.Write(binContent, , binContent.Length); }//end using } private void WirteBin(FileStream fs,string str,int row) { byte[] buffer = System.Text.Encoding.ASCII.GetBytes(str); fs.Position = * row; fs.Write(buffer, , str.Length); } private void buttonGenerate_Click(object sender, EventArgs e) { buttonImportBinary.Enabled = false; vendorCode = LeftAddZero(textBoxVendorCode.Text.Trim(), ); deviceType = LeftAddZero(textBoxDeviceType.Text.Trim(), ); hardwareVersion = LeftAddZero(textBoxHardwareVersion.Text.Trim(), ); SaveFileDialog saveDlg = new SaveFileDialog(); saveDlg.Filter = "Binary Files (*.bin)|*.bin|All Files (*.*)|*.*"; saveDlg.Title = string.Format("Save Binary File"); saveDlg.FilterIndex = ; saveDlg.RestoreDirectory = true; if (saveDlg.ShowDialog() != DialogResult.Yes) { saveBinFile = saveDlg.FileName; try { ReadWirteBinFile(); buttonGenerate.Enabled = false; } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); buttonImportBinary.Enabled = true; } } buttonImportBinary.Enabled = true; } private string RightAddZero(string str, int length) { string retStr = str; for (int i = str.Length;i< length;i++) { retStr = retStr + "\0"; } return retStr; } private string LeftAddZero(string str, int length) { string retStr = str; for (int i = str.Length; i < length; i++) { retStr ="\0"+ retStr; } return retStr; } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { sourceBinFile = openFileDialogImport.FileName; linkLabelBinaryName.Text = sourceBinFile; binContent = File.ReadAllBytes(sourceBinFile); firmwareLength = System.BitConverter.GetBytes(binContent.Length); //Array.Reverse(firmwareLength); textBoxFileLength.Text = LeftAddZero(binContent.Length.ToString(); uint crcTmp = crc32_reverse(binContent); crc32 = System.BitConverter.GetBytes(crcTmp); uint checkSumTmp = CheckSum(binContent); checkSum = System.BitConverter.GetBytes(checkSumTmp); //Array.Reverse(crc32); textBoxCRC32.Text = LeftAddZero(crcTmp.ToString(); textBoxCheckSum.Text = LeftAddZero(checkSumTmp.ToString(); } } }
C# 读写十六进制bin 文件的更多相关文章
- 如何将一个二进制的xxx.bin文件轻松转为C语言数组
今天在写一个SPI-flash读写程序,目的是要将一个二进制文件写到SPI_FLASH中,最后通过开机读取,实际上这个.bin文件就是uboot和second-boot的结合体.通过SD卡写到SPI- ...
- 使用Spark读写CSV格式文件(转)
原文链接:使用Spark读写CSV格式文件 CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号.在本文中的CSV格 ...
- Keil如何生成bin文件【Keil生成Bin文件的方法】
使用过Keil的同鞋都知道,现在Keil中默认可以输出.axf的调试文件和可以通过钩选输出的.hex可执行文件,没有bin(二进制)文件的输出选项.可是偏偏某些时候需要或者习惯性的使用.bin文件来进 ...
- S03_CH12_基于UDP的QSPI Flash bin文件网络烧写
S03_CH12_基于UDP的QSPI Flash bin文件网络烧写 12.1概述 为了满足不同的需求,本例程在"基于TCP的QSPI Flash bin文件网络烧写"上进行修改 ...
- S03_CH11_基于TCP的QSPI Flash bin文件网络烧写
S03_CH11_基于TCP的QSPI Flash bin文件网络烧写 11.1概述 针对ZYNQ中使用QSPI BOOT的应用,将BOOT.bin文件烧写至QSPI Flash基本都是通过USB C ...
- java 读写properties (配置)文件
Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文 ...
- STM32 Unicode 与 GBK 转换 .bin文件放到SD卡是啥意思
2个数组 : }; }; 一个是Unicode 编码,一个是GBK编码: 用c2b软件转成.bin 二进制文件放到SD卡里: SD卡放入字库 .FON STM32 代码: 代码中SD卡字库和二进制路径 ...
- 处理bin文件
1. fs.Position 写入的位置,从哪个位置开始写 fs.Write(byte1,0,byte1.Length); byte1写入的byte[], 写入内容从第几位开始取,length取多长 ...
- JLINK通过JFLASH烧写bin文件报错处理方法
错误原因:烧写开始地址出错,打开BIN文件后弹出的设置开始地址不正确不能为0 解决措施:用J-FLASH LITE或者将开始地址设置成正确的地址(KEILMDK中IROM1的开始地址
随机推荐
- 多线程 GET
iOS中多线程的实现 方案 简介 语言 线程生命周期 使用频率 pthread 一套通用的多线程API 适用于 Unix / Linux / Windows 等系统 跨平台\可移植 使用难度大 C 程 ...
- java调用存储过程
在做java调用sqlserver存储过程时遇到了各种各样的问题,不过在不懈的努力之下这些问题还是得以解决了.今天总结一下遇到的问题以及解决的方法. 首先调用存储过程的方法大家都很清楚: String ...
- RQNOJ659 计算系数
http://www.rqnoj.cn/problem/659 描述 给定一个多项式(ax + by)^k,请求出多项式展开后x^n * y^m项的系数. 格式 输入格式 共一行,包含5个整数,分别为 ...
- .NET逻辑分层架构总结
一.基础知识准备: 1.层的原则: (1)每一层以接口方式供上层调用. (2)上层只能调用下层. (3)依赖分为松散交互和严格交互两种. 2.业务逻辑分类: (1)应用逻辑. (2)领域逻辑. 3.采 ...
- JS,html压缩及混淆工具
现在已经出现了不少有自己特色的: JSMin Javascript compressor Packer Closure Compiler YUI Compressor Pretty Diff Java ...
- 一张图读懂https加密协议
搭建CA服务器和iis启用https:http://blog.csdn.net/dier4836/article/details/7719532 一张图读懂https加密协议 https是一种加密传输 ...
- JLS(Third Edition) Chapter12 Execution
这一章详细说明在一个program执行时,发生的activities. 它根据JVM和组成program的类.接口.实例的生命周期 组织. 一个JVM从加载一个特定的类并调用它的main方法开始启 ...
- VCF (Variant Call Format)格式详解
文章来源:http://www.cnblogs.com/emanlee/p/4562064.html VCF文件示例(VCFv4.2) ##fileformat=VCFv4.2 ##fileDate= ...
- 第二天 django apache
1. 475 brew tap homebrew/apache 476 brew install mod_wsgi 477 ls /usr/local/Cellar/mod_wsgi/4.5.7 ...
- APPCAN MAS接口之SOAP
APPCAN MAS接口中使用webservice接口形式,示例代码如下: 1 var MEAP=require("meap"); 2 3 function run(Par ...