Ik ben op zoek naar een functie, die een Int64 omzet naar een string. Ik ken de standaard delphi functies, maar deze zijn veel te traag.
Ik heb al gezocht (Search + Google) en kom niet verder als een functie voor Integer naar string (Q_IntToStrBuffer). Deze is errug snel, maar kan niet overweg met Int64 en ik heb niet genoeg ASM kennis om deze om te bouwen.
Is er iemand, die een snelle functie kent voor deze conversie?
P.S. Als iemand goed is in assembly, hier is de code voor Q_IntToStrBuff:
[Code]
// Let op! Zorg dat er geheugen gereserveerd is voor s (SetLenght bijv)
procedure Q_IntToStrBuf(N: Integer; var S: string);
asm
PUSH ESI
PUSH EDI
MOV ESI,[EDX]
MOV EDI ,ESI
TEST EAX,EAX
JE @@eq
JNS @@ns
CMP EAX,$80000000
JE @@mm
MOV BYTE PTR [ESI],$2D
INC ESI
NEG EAX
@@ns: MOV ECX,$0A
@@lp1: XOR EDX,EDX
DIV ECX
ADD DL,$30
MOV BYTE PTR [ESI],DL
INC ESI
TEST EAX,EAX
JNE @@lp1
MOV BYTE PTR [ESI],0
LEA ECX,[ESI-1]
SUB ESI,EDI
MOV DWORD PTR [EDI-4],ESI
CMP BYTE PTR [EDI],$2D
JE @@ws
@@lp2: CMP EDI,ECX
JAE @@qt
MOV AH,BYTE PTR [EDI]
MOV AL,BYTE PTR [ECX]
MOV BYTE PTR [ECX],AH
MOV BYTE PTR [EDI],AL
DEC ECX
@@ws: INC EDI
JMP @@lp2
@@qt: POP EDI
POP ESI
RET
@@eq: MOV WORD PTR [ESI],$0030
MOV DWORD PTR [ESI-4],1
POP EDI
POP ESI
RET
@@mm: MOV DWORD PTR [ESI],$3431322D
MOV DWORD PTR [ESI+4],$33383437
MOV DWORD PTR [ESI+8],$00383436
MOV DWORD PTR [ESI-4],11
POP EDI
POP ESI
end;
Ik heb al gezocht (Search + Google) en kom niet verder als een functie voor Integer naar string (Q_IntToStrBuffer). Deze is errug snel, maar kan niet overweg met Int64 en ik heb niet genoeg ASM kennis om deze om te bouwen.
Is er iemand, die een snelle functie kent voor deze conversie?
P.S. Als iemand goed is in assembly, hier is de code voor Q_IntToStrBuff:
[Code]
// Let op! Zorg dat er geheugen gereserveerd is voor s (SetLenght bijv)
procedure Q_IntToStrBuf(N: Integer; var S: string);
asm
PUSH ESI
PUSH EDI
MOV ESI,[EDX]
MOV EDI ,ESI
TEST EAX,EAX
JE @@eq
JNS @@ns
CMP EAX,$80000000
JE @@mm
MOV BYTE PTR [ESI],$2D
INC ESI
NEG EAX
@@ns: MOV ECX,$0A
@@lp1: XOR EDX,EDX
DIV ECX
ADD DL,$30
MOV BYTE PTR [ESI],DL
INC ESI
TEST EAX,EAX
JNE @@lp1
MOV BYTE PTR [ESI],0
LEA ECX,[ESI-1]
SUB ESI,EDI
MOV DWORD PTR [EDI-4],ESI
CMP BYTE PTR [EDI],$2D
JE @@ws
@@lp2: CMP EDI,ECX
JAE @@qt
MOV AH,BYTE PTR [EDI]
MOV AL,BYTE PTR [ECX]
MOV BYTE PTR [ECX],AH
MOV BYTE PTR [EDI],AL
DEC ECX
@@ws: INC EDI
JMP @@lp2
@@qt: POP EDI
POP ESI
RET
@@eq: MOV WORD PTR [ESI],$0030
MOV DWORD PTR [ESI-4],1
POP EDI
POP ESI
RET
@@mm: MOV DWORD PTR [ESI],$3431322D
MOV DWORD PTR [ESI+4],$33383437
MOV DWORD PTR [ESI+8],$00383436
MOV DWORD PTR [ESI-4],11
POP EDI
POP ESI
end;