Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > Эквивалент клипперовской функции L2DI на Delphi


Автор: Ji2m 5.12.2005, 16:53
У меня есть исходник клипперовской проги, там использованы функции L2DI и L2BI. Они превращают стринг в число и обратно. Кто нибудь знает точную похожую функцию на дельфи?Или как можно реализовать?


В ассемблере:

Код

;*******
;    I2BIN()
;       Bri и Richie
;
;       Замечание -  Так как, CL-макросы не возвращают (пока) строки,
;               содержащие нулевые байты, функция определяется как 'void'
;               и используется дополнительный вызов _retclen...
;
    CLfunc void I2BIN <int num>

    CLcode
        MOV    AX, num
        MOV    WORD PTR nbuff, AX

        ; заметьте порядок параметров
        Ccall    _retclen <OFFSET(nbuff), SEG(nbuff), 2>

    CLret


;*******
;    L2BIN()
;       Bri и Richie
;
;       Замечание -  Так как, CL-макросы не возвращают (пока) строки,
;               содержащие нулевые байты, функция определяется как 'void'
;               и используется дополнительный вызов _retclen...
;
    CLfunc void L2BIN <long num>

    CLcode
        MOV    AX, LSW(num)
        MOV    DX, MSW(num)

        MOV    WORD PTR nbuff[0], AX
        MOV    WORD PTR nbuff[2], DX

        ; заметьте порядок параметров
        Ccall    _retclen <OFFSET(nbuff), SEG(nbuff), 4>

    CLret


        ; конец ассемблерной п/п
        END



в клиппере:

Код

FUNC L2DI(A)
 * функция: число в символ
 LOCA k:=0, d1, d2, d3, d
 A=IF(A<32767999999999,A,0)
* IF A>=1000000000
 IF ABS(A)>=1000000000    && New row
   d2=CHR(VAL(RIGHT(STR(A),2))+IF(A>=0,32,132))
   d=STR(INT(ABS(A)))
   d1=VAL(RIGHT(d,9))
   d3=VAL(SUBSTR(d,1,LEN(d)-9))
   k=L2BIN(d1)+d2+I2BIN(d3)
 ELSE
   k=L2BIN(INT(ABS(A)))+CHR(VAL(RIGHT(STR(A),2))+IF(A>=0,32,132))+I2BIN(0)
 END
RETU k





Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)