[C/Delphi] Int64 converteren naar string

Pagina: 1
Acties:

  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
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;

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Hoezo te traag???

En die functie voor je ombouwen, dat riekt naar een script request

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Veel te traag is precies zoals ik het zeg. De meeste standaard functies kunnen veel sneller.

En het is geen script request. (Sorry voor de onduidelijkheid) Ik wil alleen graag weten hoe ik met Int64 om moet gaan in assembly. De code dient alleen als voorbeeld, zodat mensen precies weten wat ik bedoel. Het ombouwen wil ik best zelf doen, maar zoals ik al zei, mijn assembly kennis is aan de lage kant.

  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 30-08 08:47
Waarom moet dit in Assembler? Hoevaak (per seconde/minuut/etc :? ) moet je programma die conversie dan doen? Als dat niet al te vaak is, dan kan je toch net zo goed zelf een efficiënte routine schrijven in plain C :? Tuurlijk kan het in Assembler .. en 'ja', ik zou het in Assembler kunnen maken .... Beantwoord eerst de bovenstaande vragen maar.

"The fastest code, is the code that is never called."


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Dubbelpost?? Affijn..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Ok, ik breid mijn vraag wat uit:
Waarom is de strtoint64 voor jou te traag?

(stel: je hebt een txt waar 10.000 van die dingen instaan. In dit geval is de snelheid van de strtoint64 niet je probleem maar het gekozen formaat om die 10.000 int's in op te slaan.)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Dit wordt toegepast voor het verwerken van records in grote databases. Het gaat hierbij om ongeveer 1.000.000 keren deze functie aanroepen per te genereren rapport. Er worden meerdere rapporten gegenereerd.
Alle onderdelen van het programma dienen dus zo snel mogelijk te zijn. Ook deze.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

en een fieldbyname['blaat'].asstring is ook nog te langzaam voor je? Of is deze niet te gebruiken? (je kan een integer veld gewoon met .asstring uitlezen namelijk).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Er staan een paar van dat soort functies op m'n site, allemaal assembler en geoptimaliseerd:
Unsigned 64bit interger to dec ASCIIZ without MMX
64 bit to dec ASCIIZ - 2 with MMX
64 bit to deciamal ASCIIZ with MMX

www.madwizard.org

Pagina: 1