8,834
社区成员
发帖
与我相关
我的任务
分享
private void Change()
{
if (textBox1.Text != "")
{
if (textBox2.Text != "")
{
this.Invoke(new EventHandler(delegate
{
this.Text = "Hex转Bin小工具(正在读取Hex,请稍等...)";
button2.Enabled = false;//失能转换按钮
button1.Enabled = false;//Hex文件锁定
button3.Enabled = false;//bin文件锁定
}));
try
{
StreamReader HexReader = new StreamReader(file.FileName);
while (true)
{
string szLine = HexReader.ReadLine(); //读取一行数据
if (szLine == null) //读完所有行
{
HexReader.Close();
break;
}
if (szLine.Substring(0, 1) == ":") //判断第1字符是否是:
{
if (szLine.Substring(1, 8) == "00000001")//数据结束
{
this.Invoke(new EventHandler(delegate
{
this.Text = "Hex转Bin小工具(Hex读取成功)";
}));
HexReader.Close();
break;
}
if (szLine.Substring(1, 1) == "1" || (szLine.Substring(3, 4) != "0000" && szLine.Substring(1, 1) == "0"))
{
szHex += szLine.Substring(9, szLine.Length - 11); //读取有效字符:后0和1
}
}
}
}
catch
{ }
Int32 i;
Int32 j = 0;
Int32 Length = szHex.Length;
byte[] szBin = new byte[Length / 2];
for (i = 0; i < Length; i += 2) //两字符合并成一个16进制字节
{
szBin[j] = (byte)Int16.Parse(szHex.Substring(i, 2), NumberStyles.HexNumber);
j++;
}
try
{
FileStream fs = new FileStream(Savefile.FileName, FileMode.Create);
//FileStream fs =File.Create(foldPath);
BinaryWriter bw = new BinaryWriter(fs);
this.Invoke(new EventHandler(delegate
{
this.Text = "Hex转Bin小工具(已转换0%)";
}));
for (int k = 0; k < j; k++)
{
bw.Write(szBin[k]);
this.Invoke(new EventHandler(delegate
{
this.Text = "Hex转Bin小工具(已转换" + ((int)(((float)k / (float)j) * 100)).ToString() + "%)";
}));
}
bw.Close();
fs.Close();
this.Invoke(new EventHandler(delegate
{
button3.Enabled = true;//可以重新选择bin文件
button2.Enabled = true;//使能转换按钮
button1.Enabled = true;//可以重新选择hex文件
}));
MessageBox.Show("转换完成", "提示");
}
catch
{ }
}
else
{
MessageBox.Show("请选择bin文件保存路径", "提示");
}
}
else
{
MessageBox.Show("请选择一个Hex文件", "提示");
}
}