读一个十六进制的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 文件的更多相关文章

  1. 如何将一个二进制的xxx.bin文件轻松转为C语言数组

    今天在写一个SPI-flash读写程序,目的是要将一个二进制文件写到SPI_FLASH中,最后通过开机读取,实际上这个.bin文件就是uboot和second-boot的结合体.通过SD卡写到SPI- ...

  2. 使用Spark读写CSV格式文件(转)

    原文链接:使用Spark读写CSV格式文件 CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号.在本文中的CSV格 ...

  3. Keil如何生成bin文件【Keil生成Bin文件的方法】

    使用过Keil的同鞋都知道,现在Keil中默认可以输出.axf的调试文件和可以通过钩选输出的.hex可执行文件,没有bin(二进制)文件的输出选项.可是偏偏某些时候需要或者习惯性的使用.bin文件来进 ...

  4. S03_CH12_基于UDP的QSPI Flash bin文件网络烧写

    S03_CH12_基于UDP的QSPI Flash bin文件网络烧写 12.1概述 为了满足不同的需求,本例程在"基于TCP的QSPI Flash bin文件网络烧写"上进行修改 ...

  5. S03_CH11_基于TCP的QSPI Flash bin文件网络烧写

    S03_CH11_基于TCP的QSPI Flash bin文件网络烧写 11.1概述 针对ZYNQ中使用QSPI BOOT的应用,将BOOT.bin文件烧写至QSPI Flash基本都是通过USB C ...

  6. java 读写properties (配置)文件

    Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文 ...

  7. STM32 Unicode 与 GBK 转换 .bin文件放到SD卡是啥意思

    2个数组 : }; }; 一个是Unicode 编码,一个是GBK编码: 用c2b软件转成.bin 二进制文件放到SD卡里: SD卡放入字库 .FON STM32 代码: 代码中SD卡字库和二进制路径 ...

  8. 处理bin文件

    1. fs.Position  写入的位置,从哪个位置开始写 fs.Write(byte1,0,byte1.Length); byte1写入的byte[], 写入内容从第几位开始取,length取多长 ...

  9. JLINK通过JFLASH烧写bin文件报错处理方法

    错误原因:烧写开始地址出错,打开BIN文件后弹出的设置开始地址不正确不能为0 解决措施:用J-FLASH LITE或者将开始地址设置成正确的地址(KEILMDK中IROM1的开始地址

随机推荐

  1. XPath使用小结

    参考资料: http://www.w3school.com.cn/xpath/xpath_nodes.asp

  2. R语言学习笔记

    向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...

  3. hdu4888 Redraw Beautiful Drawings 最大流+判环

    hdu4888 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/6553 ...

  4. oracle 中的trunc()函数及加一个月,一天,一小时,一分钟,一秒钟方法

    返回处理后的数据,不同于round()(对数值进行四舍五入处理),该函数不对指定小数前或后的数值部分进行舍入处理. 语法:trunc(number[,decimals]) 其中,number为待做处理 ...

  5. CString::Mid成员函数

    CString Mid( int nFirst, int nCount ) const; 此成员函数从此CString对象中提取一个长度为nCount个字符的子串,从nFirst(从零开始的索引)指定 ...

  6. corntab

    http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

  7. 初探Ajax

    1.什么是Ajax Ajax是Asynchronous JavaScript and XML的缩写,这一技术能从服务器请求额外数据而无需卸载页面.传统的HTTP请求流程大概是这样的,浏览器向服务器发送 ...

  8. HDOJ 3652 B-number

    B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. 【C语言入门教程】5.3 函数的调用 与 参数

    函数通过调用获得程序的控制权,函数的参数是调用者与函数的数据接口.函数可以定义一个或多个参数,也可以省略参数,调用时将与参数的数据类型相匹配的数据置于参数列表中,即可在函数体内使用.参数的调用有多种形 ...

  10. Handler Should be static or leaks Occur?

    解决办法: public class SampleActivity extends Activity { /** * Instances of static inner classes do not ...