Intel Hex文件读写,高手们请进

wysfair 2009-08-14 04:32:48
有个Hex文件如下:

:203FC0000000000000000000000000000000000000000000000000000000000000000000E1
:203FE0000000000000000000000000000000000000000000000000000000000000000000C1
:20400000EB079000D0011510011E50B8801F8ED85888160800882E3801880E0000883602B9
:2040200000883E1000881E14009A8D0207888A1608008A2E38018A0E00008A3602008A3E7D
:2040400010008A1E1400A036011FCBFFB800008EC0BBC00326FF2FFFB50A8A0E0000B800EE
:20406000008EC0BBC40326FF2FFFFFFFFFFFFFFF1EB9801F8ED9C8010000C41E0C0026F673
:2040800087F2102074122EC41EC43B26C41F26803F097404804E0806C41E0C0026F68723E3



此为一电梯的的芯片配置文件(速度,高度,层站等)

还有一个地址对照表.

现任务

做一个Windows界面:可以随意更改电梯的配置,也就是Hex文件的读写,请问如何实现..关键是如果读写

各位大大不吝赐教





...全文
425 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tasehouny 2011-09-27
  • 打赏
  • 举报
回复
回帖接分
richwysfair 2009-08-20
  • 打赏
  • 举报
回复
马甲接分
mjp1234airen4385 2009-08-17
  • 打赏
  • 举报
回复

FileStream FS = new FileStream("abc.hex", FileMode.Open);
FS.Postion = 10;//这个C++中的Seek()一样。



wysfair 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 wysfair 的回复:]
有个Hex文件如下:

:203FC0000000000000000000000000000000000000000000000000000000000000000000E1
:203FE0000000000000000000000000000000000000000000000000000000000000000000C1
:20400000EB079000D0011510011E50B8801F8ED85888160800882E3801880E0000883602B9
:2040200000883E1000881E14009A8D0207888A1608008A2E38018A0E00008A3602008A3E7D
:2040400010008A1E1400A036011FCBFFB800008EC0BBC00326FF2FFFB50A8A0E0000B800EE
:20406000008EC0BBC40326FF2FFFFFFFFFFFFFFF1EB9801F8ED9C8010000C41E0C0026F673
:2040800087F2102074122EC41EC43B26C41F26803F097404804E0806C41E0C0026F68723E3


此为一电梯的的芯片配置文件(速度,高度,层站等)

还有一个地址对照表.

现任务

做一个Windows界面:可以随意更改电梯的配置,也就是Hex文件的读写,请问如何实现..关键是如果读写

各位大大不吝赐教



[/Quote]


这个算了..问下C#如何直接读写二进制文件,比如在C++中有个Seek() 在C#怎么实现?
  • 打赏
  • 举报
回复
通常的操作都是生成一个文件后,然后将文件烧到芯片上。
wysfair 2009-08-14
  • 打赏
  • 举报
回复
不行吧...我所说的Addrees是一个物理地址哦....
wysfair 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 softlove03 的回复:]
FileStream fs = new FileStream("old.hex",FileMode.Open);  //打开原始文件
byte[] b = new byte[fs.Length]; 
fs.Read(b, 0, fs.Length);  //将文件内容复制到b数组
fs.Close();

//修改b[i]  指定i值就可以修改值了

ChangeValue(int Address,byte[] bs)
{
for(int i=0;i <bs.Length;++i)
{
      b[Address + i] = bs[i];
}
}


FileStream fs2 = new FileStream("new.hex", FileMode.Create);  //新建文件
fs2.Write(b,0,b.Length);  //写文件
fs2.Close();  //关闭文件
[/Quote]
感觉对头...我先调试先
  • 打赏
  • 举报
回复
FileStream fs = new FileStream("old.hex",FileMode.Open); //打开原始文件
byte[] b = new byte[fs.Length];
fs.Read(b, 0, fs.Length); //将文件内容复制到b数组
fs.Close();

//修改b[i] 指定i值就可以修改值了

ChangeValue(int Address,byte[] bs)
{
for(int i=0;i<bs.Length;++i)
{
b[Address + i] = bs[i];
}
}


FileStream fs2 = new FileStream("new.hex", FileMode.Create); //新建文件
fs2.Write(b,0,b.Length); //写文件
fs2.Close(); //关闭文件
dancingbit 2009-08-14
  • 打赏
  • 举报
回复
4L已经给出读写的方法了,稍微改一下就可以了。
wysfair 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangjun8868 的回复:]
引用 2 楼 wysfair 的回复:
LS..谢谢回答

  请问能详细一点么,原本就是二进制文件的,能直接操作二进制文件当然更好! 但是不习惯

2进制?没搞错吧
[/Quote]
用程序转成HEX文件的,这样就可以直接手工编辑了
wysfair 2009-08-14
  • 打赏
  • 举报
回复
ChangeValue(string Address,string Value)
{

}

给一个地址,就能更改该地址对应的值
wysfair 2009-08-14
  • 打赏
  • 举报
回复
LS两位..我头晕.是一个后缀为.hex的文件

我想要一个这样的方法

编程有钱人了 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wysfair 的回复:]
LS..谢谢回答

请问能详细一点么,原本就是二进制文件的,能直接操作二进制文件当然更好! 但是不习惯
[/Quote]
2进制?没搞错吧
zgke 2009-08-14
  • 打赏
  • 举报
回复
显示数据

byte[] _Data =File.ReadAllBytes(@"C:\1.xml");

textBox1.Text = BitConverter.ToString(_Data).Replace("-", "");



保存数据
MemoryStream _ValueMem = new MemoryStream();
int _Count = textBox1.Text.Length / 2;

if (textBox1.Text.Length % 2 != 0) throw new Exception("错误的数据");

for (int i = 0; i != _Count; i++)
{
_ValueMem.WriteByte(Convert.ToByte(textBox1.Text.Substring(i * 2, 2), 16));
}
File.WriteAllBytes(@"C:\1.xml", _ValueMem.ToArray());
编程有钱人了 2009-08-14
  • 打赏
  • 举报
回复
怎么看着像16进制

如果是的话


public string HexNumberToString(string InputString)
{
int len = InputString.Length >> 1;
byte[] str = new byte[len];
for (int i = 0; i < len; i++)
{
string temp = InputString.Substring(i << 1, 2);
if (temp.Length > 0)
{
str[i] = byte.Parse(temp, System.Globalization.NumberStyles.HexNumber);
}
}
return Encoding.Default.GetString(str);
}
wysfair 2009-08-14
  • 打赏
  • 举报
回复
LS..谢谢回答

请问能详细一点么,原本就是二进制文件的,能直接操作二进制文件当然更好! 但是不习惯
dancingbit 2009-08-14
  • 打赏
  • 举报
回复
关键只在于是以二进制形式存储的,还是以文本形式存储的。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧