У меня есть исходник клипперовской проги, там использованы функции 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
|
|