Для интереса попробовал решать такую задачку в программе MathCad-14 :-). Получилось, так как там имеются неплохие встроенные функции чтения/записи файлов и преобразования строковых переменных в числовые и наоборот (правда, встроенные функции там могут заметно меняться от версии к версии). На всякий случай, описываю
результаты опытов, вдруг кому-нибудь ещё будет интересно:
Сначала в исходном файле надо удалить лишние столбцы таблицы и сохранить нужную текстовою таблицу hex-кодов как обычный файл .txt; вот так выглядит
его начало
Вот маткадная прога для преобразования его в бинарник:
Увеличить
Видно, что встроенной командой чтения READFILE создался двумерный массив А, но те элементы таблицы, которые имели вид десятичных цифр, преобразовались не в текстовые символы, а в числа. Поэтому мы преобразуем А в массив В с помощью встроенных функций работы со строками, так что элементы массива B принимают однотипный строковый вид "0xxh", где xx это hex-код элементов из исходной текстовой таблицы.
Встроенная функция str2num позволяет преобразовывать символы "0xxh" в числа; таким путём мы создаём из рядов матрицы В одномерный массив чисел C. Укорачиваем его, если нужно, до нужной длины (L3). И записываем эти числа в 16-ричном форме в бинарный файл (т.е. как последовательность байтов) встроенной функцией записи WRITEBIN; вот так выглядит
начало получившегося бинарника.
---------
Аналогично решается и обратная задачка: преобразование байтов какого-либо файла в текстовую таблицу с hex-кодами (16-ричное представление байтов); вот маткадная прога для такого преобразования "бинарника" в файл .txt:
Увеличить
Видно, что встроенной командой чтения READBIN создался одномерный массив А, в котором байты прочитанного файла представлены целыми десятичными числами в диапазоне 0 - 255. На основе встроенной функции num2str мы сделали свою (пользовательскую) функцию Big(x) которая преобразует целое число из диапазона 0 - 15 в hex-символ. Она вместе со встроенной функцией concat, объединяющей строки символов в одну символьную строку, используется далее в пользовательской функции DecNum2HexStr, которая преобразует числа из А в hex-коды байтов. В итоге, строится одномерный массив B, элементами которого являются строки, содержащие по 16 штук hex-кодов байтов, разделённых пробелами. Этот массив символов В записывается в текстовый файл командой WRITEPRN; вот так выглядит его
начало. В принципе, не сложно добавить в прогу и вывод hex-нумерации байтов в начале каждой строки txt-файла.
(Чтобы, для проверки, полученный так файл .txt преобразовать указанной первой маткадной прогой обратно в "бинарник", надо удалить в .txt все текстовые комментарии, добавленные Маткадом, и удалить кавычки; например, "Блокнотом" в режиме автоматической замены кавычек пробелом; вот так будет выглядеть
начало очищенного файла .txt. Аналогично можно вручную печатать в "Блокноте" hex-коды любых байтов, которые затем маткадная прога запишет в виде "бинарника"; почти в духе старых добрых времён, когда "софт" для самодельных ЭВМ набивали побайтно вручную :-)