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

Я сделал это аналогично тому, что сплинтор выше.

Ваше представление:

<ComboBox  
ItemsSource="{Binding CompetitorBrands}" 
DisplayMemberPath="Value" 
SelectedValuePath="Key" 
SelectedValue="{Binding Path=CompMfgBrandID, 
Mode=TwoWay,
UpdateSourceTrigger=Explicit}" //to indicate that you will call UpdateSource() manually to get the property "CompMfgBrandID" udpated 
SelectionChanged="ComboBox_SelectionChanged"  //To fire the event from the code behind the view
Text="{Binding CompMFGText}"/>

Ниже приведен код для обработчика событий «ComboBox_SelectionChanged» из файла кода за представлением. Например, если вы просматриваете myview.xaml, имя файла кода для этого обработчика событий должно быть myview.xaml.cs

private int previousSelection = 0; //Give it a default selection value

private bool promptUser true; //to be replaced with your own property which will indicates whether you want to show the messagebox or not.

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox comboBox = (ComboBox) sender;
            BindingExpression be = comboBox.GetBindingExpression(ComboBox.SelectedValueProperty);

            if (comboBox.SelectedValue != null && comboBox.SelectedIndex != previousSelection)
            {
                if (promptUser) //if you want to show the messagebox..
                {
                    string msg = "Click Yes to leave previous selection, click No to stay with your selection.";
                    if (MessageBox.Show(msg, "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) //User want to go with the newest selection
                    {

                        be.UpdateSource(); //Update the property,so your ViewModel will continue to do something
                        previousSelection = (int)comboBox.SelectedIndex;  
                    }
                    else //User have clicked No to cancel the selection
                    {
                        comboBox.SelectedIndex = previousSelection; //roll back the combobox's selection to previous one
                    }
                }
                else //if don't want to show the messagebox, then you just have to update the property as normal.
                {
                    be.UpdateSource();
                    previousSelection = (int)comboBox.SelectedIndex;
                }
            }
        }
15
задан none 14 June 2009 в 20:07
поделиться

11 ответов

В число вещей, которые я хочу сделать, входит представление произвольных фрагментов данных в различных формах (двоичная, десятичная, шестнадцатеричная), преобразование данных из одного порядка байтов в другой и т. Д. То есть то, что вы обычно делаете используйте C или ассемблер для, но я ищу язык, который позволяет очень быстро писать крошечные фрагменты кода для узкоспециализированных одноразовых целей.

Что ж, хотя это может показаться нелогичным, я обнаружил erlang очень хорошо подходит для этого, а именно благодаря мощной поддержке сопоставления с образцом , даже для байтов и битов (так называемый « битовый синтаксис Эрланга »). Это позволяет очень легко создавать даже очень сложные программы, которые занимаются проверкой и обработкой данных на байтовом и даже на битовом уровне:

С 2001 г. Функциональный язык Erlang имеет байтовый тип данных (называемый двоичным) и конструкции для сопоставления с образцом в двоичном файле.

И процитируем informIT.com :

(Erlang) Сопоставление с образцом действительно начинает весело в сочетании с двоичным тип. Рассмотрим приложение, которое получает пакеты из сети и затем обрабатывает их. Четыре байта в пакет может быть сетевым байтовым порядком идентификатор типа пакета. В Erlang вы потребуется всего лишь один processPacket функция, которая могла бы преобразовать это в структура данных для внутреннего обработка. Это бы выглядело что-то двоичное сопоставление с образцом

  • Устройство чтения / записи MIDI-файлов на Erlang
  • Битовый синтаксис Erlang
  • Понимание порядка байтов
  • Игра с Erlang
  • Эрланг: объявления сопоставления с образцом и утверждения регистра / другое
  • Потоковая библиотека Двоичные файлы Erlang
  • Двоичные файлы битового уровня и обобщенные представления в Erlang
  • Приложения, реализация и оценка производительности программирования битовых потоков в Erlang
  • 27
    ответ дан 1 December 2019 в 00:18
    поделиться
    5
    ответ дан 1 December 2019 в 00:18
    поделиться

    Я использую 010 Editor для постоянного просмотра двоичных файлов, чтобы просмотреть двоичные файлы. Он особенно приспособлен для работы с двоичными файлами.

    Он имеет простой в использовании c-подобный язык сценариев для анализа двоичных файлов и представления их в очень удобочитаемом виде (в виде дерева, поля, закодированные по цвету, и тому подобное). . Есть несколько примеров сценариев для анализа файлов zip и bmp.

    Каждый раз, когда я создаю двоичный формат файла, я всегда делаю небольшой сценарий для редактора 010 для просмотра файлов. Если у вас есть файлы заголовков с некоторыми структурами, создание программы для чтения двоичных файлов займет считанные минуты.

    3
    ответ дан 1 December 2019 в 00:18
    поделиться

    Взгляните на битовую строку python , похоже, именно то, что вам нужно :)

    4
    ответ дан 1 December 2019 в 00:18
    поделиться

    В стандартной библиотеке Python есть кое-что из того, что вам нужно - в частности, модуль array позволяет легко читать части двоичных файлов, порядок байтов подкачки и т. Д .; модуль struct позволяет более детально интерпретировать двоичные строки. Однако ни один из них не является настолько богатым, насколько вам требуется: например, чтобы представить одни и те же данные в виде байтов или полуслов, вам необходимо скопировать их между двумя массивами (стороннее дополнение numpy намного удобнее мощный для интерпретации одной и той же области памяти несколькими различными способами), и, например, для отображения некоторых байтов в шестнадцатеричном формате, нет ничего особенного, кроме простого цикла или понимания списка, такого как [шестнадцатеричный (b) для b в байтах [начало: стоп]] .

    2
    ответ дан 1 December 2019 в 00:18
    поделиться

    Подойдет любой язык программирования высокого уровня с функциями упаковки / распаковки. Все 3 Perl, Python и Ruby могут это сделать. Это вопрос личных предпочтений. Я написал немного двоичного синтаксического анализа для каждого из них и почувствовал, что Ruby был самым простым / самым элегантным для этой задачи.

    2
    ответ дан 1 December 2019 в 00:18
    поделиться

    Почему бы не использовать интерпретатор языка Си? Я всегда использовал их, чтобы экспериментировать с сниппетами, но вы можете использовать их для написания чего-то вроде того, что вы описываете, без особых проблем.

    Мне всегда нравился EiC . Он был мертв, но недавно проект воскрес. EiC на удивление способный и достаточно быстрый. Также существует CINT . Оба могут быть скомпилированы для разных платформ, хотя я думаю, что CINT нужен Cygwin для Windows.

    2
    ответ дан 1 December 2019 в 00:18
    поделиться

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

    Я бы пошел с C - хорошо обрабатывает байты - и вы, вероятно, можете найти в Google некоторые пакеты библиотек, которые обрабатывают байты.

    Использование чего-то вроде Erlang привносит неэффективность, зависимости и другой багаж, который вам, вероятно, не нужен с низкоуровневой библиотекой.

    0
    ответ дан 1 December 2019 в 00:18
    поделиться

    Что ж, если скорость не имеет значения, и вам нужен Perl, тогда преобразуйте каждую строку двоичного кода в строку символов - нулей и единиц. Да, я знаю, что в двоичном формате нет перевода строки :), но, по-видимому, у вас есть какой-то фиксированный размер - например, по байтам или другим единицам, с помощью которых вы можете разбить двоичный blob.

    Затем просто используйте обработку строки perl на эти данные :)

    1
    ответ дан 1 December 2019 в 00:18
    поделиться

    Форт тоже может неплохо справляться с этим, но это немного загадочно.

    1
    ответ дан 1 December 2019 в 00:18
    поделиться

    Модуль Python bitstring был написан для этой цели. Он позволяет делать произвольные фрагменты двоичных данных и предлагает ряд различных интерпретаций через свойства Python. Он также предоставляет множество инструментов для создания и изменения двоичных данных.

    Например:

    >>> from bitstring import BitArray, ConstBitStream
    >>> s = BitArray('0x00cf')                           # 16 bits long
    >>> print(s.hex, s.bin, s.int)                       # Some different views
    00cf 0000000011001111 207
    >>> s[2:5] = '0b001100001'                           # slice assignment
    >>> s.replace('0b110', '0x345')                      # find and replace
    2                                                    # 2 replacements made
    >>> s.prepend([1])                                   # Add 1 bit to the start
    >>> s.byteswap()                                     # Byte reversal
    >>> ordinary_string = s.bytes                        # Back to Python string
    

    Есть также функции для побитового чтения и навигации в цепочке битов, как в файлах; на самом деле это можно сделать прямо из файла, не считывая его в память:

    >>> s = ConstBitStream(filename='somefile.ext')
    >>> hex_code, a, b = s.readlist('hex:32, uint:7, uint:13')
    >>> s.find('0x0001')         # Seek to next occurence, if found
    True
    

    Существуют также представления с разными порядками байтов, а также возможность менять порядок байтов и многое другое - см. руководство .

    4
    ответ дан 1 December 2019 в 00:18
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: