Думаю:
Код
Код:
while (Length(s)>0)and(s[1] in [#10,#13,#32,#9]) do Delete(s,1,1);
while (Length(s)>0)and(s[Length(s)] in [#10,#13,#32,#9]) do Delete(s,Length(s),1);
можно заменить на:
Код:
for i := Length(s) DownTo 1 Do
If Not (s[i] In ['0'..'9']) Then Delete(s,i,1);
По ощущениям должно быть быстрее и работать правильнее.
Тогда функция CharToDec примет вид:
Код:
function CharToDec (c: char): TDecimal;
begin
Result:=ord(c)-48
end;
и ее можно сделать inline (или просто перенести код в место вызова), что еще убыстрит в конкретном месте.
И вообще, кому-то я тут писал код, который некоторое число конвертит в битовую строку и обратно. Кстати, даже с некоторой упаковкой по сравнению с твоим кодом. Правда, это была не честная конвертация, а для передачи данных в битовом образе.