| ComSafeArray Hexadecimal. О преобразовании массива байт в строку шестнадцатеричных чисел |
| 18.09.16 15:14 |
|
Не далее как сегодня я снова столкнулся с этой задачей, но только в несколько преобразованном виде. В качестве исходных данных мне приходил большой массив ComSafeArray. Каждое значение этого массива содержало 16 элементов размерностью 1 байт. Естественно, я полез вспоминать арифметику и математику, думать пригодится ли мне здесь целочисленное деление. Но стоп! На самом деле один байт может принимать всего-то 256 значений (0x00-0xFF). Значит, для решения этой задачи мы можем применить довольно старый и испытанный табличный метод преобразования. Метод прост до безобразия. Все возможные исходящие значения записываются в табличку, которая достаточно легко адресуется. Для преобразования десятичного в шестнадцатиричный надо просто сгенерить последовательность из пар чисел: "00 01 02 03 ... 0E 0F 10 11 ... FD FE FF". Индекс значения в массиве равен значению байта полученного числа. Естественно, табличный метод тратит время на генерацию собственно таблицы. Но если необходимо преобразовать не один ComSafeArray, а сотни и тысячи, то время на генерацию таблицы не сопоставимо с выигрышем в простоте ее применения. Достаточно растекаться мыслею, приведу код табличного метода преобразования ComSaveArray в HexaDecimal вид.
Функция принимает массив, который содержит ComArray. И возвращает массив, который содержит строки. Тестовые данные я генерирую следующей функцией.
Ну, и постскриптум. Если вы полностью разобрались в коде примера, то скачивать обработку вам не надо. Все основные методы приведены в статье. |
