Как создать шестнадцатеричный редактор внутри приложения winforms - PullRequest
0 голосов
/ 21 ноября 2018

Я все еще не уверен, что лучше использовать, datagridview или Be.HexEditor, я почти уверен, что смогу сделать это с datagridview, но мне больше нравится be.hex, особенно скорость, пользовательский интерфейс и т.д. ...

Но я попытался понять код be.hex, и я не могу понять, как он работает, а также возможно ли показать значения из байтовых массивов в HexBox (не только при открытии .bin файла).он также использует dynamicFileByteProvider, и в сети нет информации об этом классе.

dynamicFileByteProvider = new DynamicFileByteProvider(fileName);
dynamicFileByteProvider.Changed += new EventHandler(byteProvider_Changed);
dynamicFileByteProvider.LengthChanged += new EventHandler(byteProvider_LengthChanged);

мое приложение откроет максимум 1024 байта файлов, а также будет считывать байты из порта связи

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Чтобы показать байт [] в шестнадцатеричном формате, используйте new DynamicByteProvider(byte[]

Чтобы получить модифицированный байт [] из шестнадцатеричного поля, используйте DynamicByteProvider.Bytes.ToArray()

0 голосов
/ 21 ноября 2018

Я немного повозился с этим.То, что я сделал, было

1) поместил невидимую графическую рамку в качестве заполнителя элемента управления в форме с именем ph1

2) настроил элемент управления HexBox в Form_Load ()

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 на форму:

enter image description here

Редактировать: если вы хотите предоставить какой-то самостоятельно сгенерированный массив байтов, это так просто:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...