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 Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private string vendorCode = "";
        private string deviceType = "";
        private string hardwareVersion = "";
        private string crc32 = "";
        private string firmwareLength = "";

        private string sourceBinFile = "";
        private string saveBinFile = "";
        private void Form1_Load(object sender, EventArgs e)
        {
            buttonGenerate.Enabled = false;
            lblMsg.Text = "";
            lblMsg.ForeColor = Color.Empty;
        }
        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)
        {
            lblMsg.Text = "";
            lblMsg.ForeColor = Color.Empty;

            vendorCode = RightAddZero(textBoxVendorCode.Text.Trim(), 2);
             deviceType = LeftAddZero(textBoxDeviceType.Text.Trim(), 18);
             hardwareVersion = RightAddZero(textBoxHardwareVersion.Text.Trim(), 4);
             crc32 = RightAddZero("CRC3", 4);

            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "Binary Files (*.bin)|*.bin|All Files (*.*)|*.*";
            dialog.Title = string.Format("Open Firmware File");
            dialog.FilterIndex = 0;
            dialog.RestoreDirectory = true;
            if (dialog.ShowDialog() != DialogResult.Yes)
            {
                sourceBinFile = dialog.FileName;
                textBoxBinaryPath.Text = sourceBinFile;
                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()
        {
            byte[] binContent = File.ReadAllBytes(sourceBinFile);
            int binLength = binContent.Length;
            firmwareLength = RightAddZero(binContent.Length.ToString(),4);

            //byte[] buffer = System.Text.Encoding.ASCII.GetBytes("NTABCD");
            using (FileStream fs = new FileStream(saveBinFile, FileMode.Create, FileAccess.Write))
            {
                string headerRow0 = vendorCode + deviceType.Substring(0, 14);
                WirteBin(fs, headerRow0, 0);
                string headerRow1 = deviceType.Substring(13) + hardwareVersion;
                WirteBin(fs, headerRow1, 1);
                string headerRow2 = crc32 + firmwareLength;
                WirteBin(fs, headerRow2, 2);
                string headerRow3 = "\0";
                WirteBin(fs, headerRow3, 3);

                   byte[] binBytes=new byte[16];
                   int j = 0;
                   int rows = 0;
                   for(int i=0;i< binLength; i++)
                   {
                        binBytes[j] = binContent[i];
                        j++;
                         //16字节一行
                         if (j % 16 == 0)
                         {
                            rows++;
                            fs.Position = 16 * (rows+3);
                            fs.Write(binBytes, 0, 16);
                            j = 0;
                         }

                   }

            }

        }

        private void WirteBin(FileStream fs,string str,int row)
        {

            byte[] buffer  = System.Text.Encoding.ASCII.GetBytes(str);
            fs.Position = 16 * row;
            fs.Write(buffer, 0, str.Length);
        }

        private void buttonGenerate_Click(object sender, EventArgs e)
        {

            SaveFileDialog saveDlg = new SaveFileDialog();
            saveDlg.Filter = "Binary Files (*.bin)|*.bin|All Files (*.*)|*.*";
            saveDlg.Title = string.Format("Save Binary File");
            saveDlg.FilterIndex = 0;
            saveDlg.RestoreDirectory = true;
            if (saveDlg.ShowDialog() != DialogResult.Yes)
            {
                saveBinFile = saveDlg.FileName;
                textBoxBinaryPath.Text = saveBinFile;
                try
                {
                    ReadWirteBinFile();
                    lblMsg.Text = "It‘s ok!";
                    lblMsg.ForeColor = Color.LightSeaGreen;
                    buttonGenerate.Enabled = false;

                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

        }

        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;
        }

    }
}
时间: 2024-10-03 14:41:45

C# 读写十六进制bin 文件的相关文章

bin文件转换为hex文件C语言实现

对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成了hex文件.那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下: 最通俗的来讲,hex是带地址的,用下载器下载时,不需要设置偏移地址,它是文件流格式的,都是标准的ASCII码.而bin文件是不带地址的,全部是二进制数据流,打住一下,其实就是我们所谓的机器代码.有兴趣的同学,可以尝试着用反汇编,得到的就是汇编代码了.我所用的开发板S3C2440

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

使用过Keil的同鞋都知道,现在Keil中默认可以输出.axf的调试文件和可以通过钩选输出的.hex可执行文件,没有bin(二进制)文件的输出选项.可是偏偏某些时候需要或者习惯性的使用.bin文件来进行烧写,下面各举一例: 1. 一直使用ADS的用户习惯性的使用.bin文件: 2. 某些烧写器带的应用软件只支持.bin文件: 3. 正如笔者遇到的情况,我在使用STM32公司提供的网络更新固件程序的例程时,需要用到.bin文件(.hex文件通过网络更新后遇到某些问题,而且用Hex2Bin软件转换后

用DAEMON TOOLS打开rational ross 的bin文件并安装过程梳理

最近要开始准备毕业设计了,学习熟悉了一些UML用例图.类图之类的,开始准备用自家PC电脑画图的时候发现Rational Ross没安装. 本以为简单,却碰上bin文件.琢磨好久,终于把Ross安上了.下面讲讲期间遇到的问题及解决方法. 注:Rational Ross 以下简称Ross 1.下载Ross 网上一堆Ross安装包,有2003版本和2007版本两种,听说win7不兼容2003版本(不知道是真是假),总之我下了个2007版的Ross 打开链接:http://pan.baidu.com/s

使用FileSystem类进行文件读写及查看文件信息

使用FileSystem类进行文件读写及查看文件信息 在这一节我们要深入了解Hadoop的FileSystem类--这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现,但我们在编码时一般也要注意代码在FileSystem不同子类文件系统之间的可移植性.这是非常有用的,比如说你可以非常方便的直接用同样的代码在你的本地文件系统上进行测试. 使用hadoop URL读数据 从hadoop文件系统中读取文件的最简单的方法之一便是使用java.net.URL对象来打开一个欲从中

linux 用dd命令读写引导区文件

分类: LINUX 备份MBR,linux下使用如下命令: # dd if=/dev/hda of=/root/linux.bin bs=512 count=1 这里注意使用if=/dev/hda备份MBR中数据,如果grub安装具体某个分区,则要自己选择了. 写入mbr: dd if=/mnt/windows/linux.lnx of=/dev/hda bs=512 count=1 备份之后linux.bin文件可以复制到Windows下,备份一份,另一份复制到C盘根目录下.然后修改boot.

使用keil生成bin文件

相关文件  下载http://pan.baidu.com/share/link?shareid=478269&uk=1107426113 使用kei自带的工具的话是 打开Options for Target 对话框,选择User标签页: 勾选Run User Programs After Build/Rebuild框中的Run #1多选框. UV3版本在文本框输入C:/Keil/ARM/BIN31/fromelf.exe --bin -o ./test.bin ./test.axf命令行: UV

ARM的BIN文件反汇编方法

最近在调试uboot的代码时,用的新版本的uboot,lowlevel_init函数里是空的,而且在链接文件中也没有发现对lowlevel_init.o的链接.在bl lowlevel_init 之前和之中加了两个电灯,发现在bl之后的部分并没有被执行,所以想看看具体程序有没有运行这个函数.在网上找反汇编bin文件的时候发现有朋友提供的方法,很好用. 使用arm-linux 工具链里面的arm-linux-objdump 就能反汇编 cd到bin文件所在的目录, 在命令行下输入: arm-lin

php转换图片为.bin文件

[我的另外一个博客地址:http://www.ncmacker.cc,那边排版会比较好点.] 公司的打印机最近新添加一个打印图片的功能,具体是用户在后台设置他的logo,服务器接收到图片文件,转换单色的bmp文件(热敏打印机),再由php将单色bmp图片转换成bin文件,里面包含了图片的头信息和数据.做这么个小功能还花了我不少时间,走了很多弯路,各位看官请容我一一讲述吧. 思路1:使用PHP扩展用c语言来完成这个操作 最开始的时候,认为这个操作php语言无法胜任,于是选用了php extensi

php学习基础-文件系统(二) 文件读写操作、文件资源处理

一.文件的打开与关闭 /* *读取文件中的内容 * file_get_contents(); //php5以上 * file() * readfile(); * * 不足:全部读取, 不能读取部分,也不能指定的区域 * * fopen() * fread() * fgetc() * fgets() * * * * * 写入文件 * file_put_contents("URL", "内容字符串"); //php5以上 * 如果文件不存在,则创建,并写入内容 * 如果