Здравствуйте.
Конвертировать данные из BCD-формата в десятичный можно последовательным суммированием BCD-цифр умноженных на десять в степени индекс разряда (справа налево, начиная с 0).
Большую сложность представляет получение BCD-цифр из исходных данных - нужно знать их формат представления. Это может быть последовательность байтов с одной цифрой в младший тетраде, двумя цифрами в каждом байте, по 4 цифры в одном 16-разрядном слове, по 8 в 32-разрядном.
Или сборке по отдельным BCD-цифрам произвольных переменных, например скрипт "Изменились переменные, перечисленные в скрипте":function Digit(const aVariable:TM_Variable; const BCDindex:integer; const DiGindex:integer): int64;
var i: int64;
j: integer;
begin
i := (aVariable.AsInt64 shr (BCDindex * 4)) and $F; // извлечь BCD-цифру
for j := 1 to DIGindex do i := i * 10; // ее значение в соответствующим разряде десятичного числа
Result := i;
end;
var ii: int64;
begin
// поразрядная сборка по набору переменных
ii := Digit(QuadrupleDigit_1, 2, 0) + // слово - 4 цифры
Digit(DoubleDigit_2, 1, 1) + // упакованный байт - 2цифры
Digit(DoubleDigit_2, 0, 2) + // упакованный байт - 2цифры
Digit(SingleDigit_4, 0, 3) + // байт - цифра в младшей тетраде
Digit(SingleDigit_0, 0, 4) + // байт - цифра в младшей тетраде
Digit(EightDigit, 7, 5); // двойное слово - 8 цифр
Field21.Text := IntToStr(ii); // вывод результата
end.
Во вложении пример для всех перечисленных способов представления BCD-числа.