Форум: "Прочее";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
ВнизИщу исходники функции IntToStr на паскале Найти похожие ветки
← →
IGray (2010-08-12 08:37) [0]Собственно сабж..
Мне нужно её доработать для отображения числа в произвольной системе счисления.
Заранее спасибо!
← →
12 © (2010-08-12 08:41) [1]не было там такой, вроде бы..
а в делфи ctrl+клик на слове
function IntToStr(Value: Integer): string;
asm
PUSH ESI
MOV ESI, ESP
SUB ESP, 16
XOR ECX, ECX // base: 0 for signed decimal
PUSH EDX // result ptr
XOR EDX, EDX // zero filled field width: 0 for no leading zeros
CALL CvtInt
MOV EDX, ESI
POP EAX // result ptr
CALL System.@LStrFromPCharLen
ADD ESP, 16
POP ESI
end;
← →
MBo © (2010-08-12 09:07) [2]Логика и алгоритм преобразования в строковый вид ясны или что-то непонятно?
← →
KilkennyCat © (2010-08-12 09:16) [3]
> 12 © (12.08.10 08:41) [1]
маловато паскаля
← →
Dimka Maslov © (2010-08-12 11:32) [4]в сях _itoa работает с любой системой счисления от двоичной до тридцатишестеричной.
Решение задачи:
Пишем dll с одной функцией, подключаем её к своей программе.
← →
icWasya © (2010-08-12 12:13) [5]на паскале были процедуры str и val
← →
Игорь Шевченко © (2010-08-12 13:23) [6]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1091#05
и сами исходники
http://www.delphikingdom.com/zip/d2005_utest.zip
← →
Anatoly Podgoretsky © (2010-08-12 15:59) [7]> Dimka Maslov (12.08.2010 11:32:04) [4]
Если расчеты делать по модулю Х, то проблемы могут возникнуть только с
60тиричной системой
← →
ocean (2010-08-12 16:38) [8]> 12 © (12.08.10 08:41) [1]
Красиво. Как в анекдоте про Форда: купил картошку за 10 центов, продал за 12, и т.д., а потом умер дядя и оставил миллион.
← →
ocean (2010-08-12 16:43) [9](имеется в виду, красиво заполнил регистры, сохранил в стек, а потом бах - вызвал функцию, которая все сделала.)
← →
Димка На (2010-08-12 17:30) [10]begin
star(....)
end;
← →
Дмитрий С © (2010-08-12 17:40) [11]str() точнее
← →
Sha © (2010-08-12 21:31) [12]Чур, кто про деление скажет - тот не умеет программировать
← →
Дмитрий С © (2010-08-12 22:02) [13]
> Sha © (12.08.10 21:31) [12]
Неверные критерии. Самый простой способ - деление/остаток от деления.
← →
Sha © (2010-08-13 02:34) [14]> Дмитрий С © (12.08.10 22:02) [13]
Нормальные критерии: "да" и "нет" говорите, "div" и "mod" не берите.
Только твой пост не в ногу :)
← →
Дмитрий С © (2010-08-13 03:18) [15]
> Sha © (13.08.10 02:34) [14]
Я не хочу быть "тот не умеет программировать", но как без деления эту задачу сделать даже и не знаю(
← →
0x00FF00 © (2010-08-13 05:43) [16]Дмитрий С © (13.08.10 03:18) [15]
Например, взятием только верхнего DWORD"а из результирующего QWORD"а после умножения "делимого" на специально подобранную константу.
Когда-то я её даже помнил, и один раз даже троллил препода с помощью указанного метода.
← →
Sha © (2010-08-13 10:46) [17]Еще можно без умножений
function MyIntToStr(n: integer): string;
var
ch: array[0..9] of char;
c, d: cardinal;
i: integer;
begin
if n<0 then Result:="-" else Result:="";
FillChar(ch,SizeOf(ch),"0");
c:=abs(n);
d:=9;
while c>d do begin
inc(d,10);
i:=0;
while true do begin
inc(ch[i]);
if ch[i]<="9" then break;
ch[i]:="0";
inc(i);
end;
end;
for i:=9 downto 0 do if ch[i]<>"0" then Result:=Result+ch[i];
Result:=Result+chr(c-d+ord("9"));
end;
или исхитриться заюзать че-нить типа MulDiv и т.п.
В общем, каждый по-своему пишет :)
← →
Anatoly Podgoretsky © (2010-08-13 19:01) [18]> Дмитрий С (13.08.2010 03:18:15) [15]
По школе помню, деление можно заменить вычитанием.
← →
Sha © (2010-08-13 19:27) [19]> Anatoly Podgoretsky © (13.08.10 19:01) [18]
> По школе помню, деление можно заменить вычитанием.
Причем со школьным вычитанием получится еще и быстрее, чем у меня
> Дмитрий С (13.08.2010 03:18:15) [15]
> но как без деления эту задачу сделать даже и не знаю(
Просто добавь констант
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c