我还是很困惑使用什么更好的东西,datagridview或Be.HexEditor, 我很确定我可以使用datagridview做到这一点,但是我更喜欢be.hex,尤其是速度,UI等...
但是我试图理解be.hex的代码,我无法弄清楚它是如何工作的,并且有可能将字节数组中的值显示给HexBox(不仅是从打开{{1}开始) }文件)。它也使用.bin
,并且网上也没有关于此类的信息。
dynamicFileByteProvider
我的应用程序将最多打开1024个字节的文件,并且还将从通讯端口读取字节
答案 0 :(得分:0)
我对此做了些修改。我所做的是
1)在窗体上放置一个不可见的图片框作为控件占位符,此处命名为ph1
2)在Form_Load()中配置HexBox控件
private HexBox hexBox;
private void Form1_Load(object sender, EventArgs e)
{
hexBox = new HexBox()
{
Top = ph1.Top,
Width = ph1.Width,
Height = ph1.Height,
Left = ph1.Left,
Visible = true,
UseFixedBytesPerLine = true,
BytesPerLine = 16,
ColumnInfoVisible = true,
LineInfoVisible = true,
StringViewVisible = true,
VScrollBarVisible = true
};
this.Controls.Add(hexBox);
this.Controls.Remove(ph1);
}
3)在DragDrop事件中加载实际文件
var filePath = ((string[])(e.Data.GetData(DataFormats.FileDrop)))[0];
var source = new FileByteProvider(filePath);
hexBox.ByteProvider = source;
hexBox.Refresh();
将docx文件拖放到表单后的示例:
编辑:如果您希望提供一些自行生成的字节数组,就这么简单:
byte[] byteArr = {0xaa, 0x3f, 0x4b};
hexBox.ByteProvider = new DynamicByteProvider(byteArr);
编辑2:保存十六进制框的内容: 我相信有更好的方法可以做到这一点。我现在发现的只是在十六进制框定义块中添加一个处理程序:
hexBox.CopiedHex += HexBox_CopiedHex;
具有这样的代码的某种“保存”按钮:
private void button1_Click(object sender, EventArgs e)
{
hexBox.SelectAll();
hexBox.CopyHex();
hexBox.SelectionLength = 0;
}
还有这样的事件处理程序:
private void HexBox_CopiedHex(object sender, EventArgs e)
{
var hex = Clipboard.GetText();
var hexHex = hex.Split(' ');
var hexArr = new byte[hexHex.Length];
for (var i = 0; i < hexHex.Length; i++)
{
hexArr[i] = byte.Parse(hexHex[i], NumberStyles.AllowHexSpecifier);
}
File.WriteAllBytes(@"C:\00_Work\test.bin", hexArr);
}
答案 1 :(得分:0)
要在十六进制框中显示byte [],请使用new DynamicByteProvider(byte[]
要从hexbox中获取修改的字节[]
使用DynamicByteProvider.Bytes.ToArray()