![]() |
Re: Umwandlung charkombination nach integer
Nunja, wir haben ja pro Buchstaben ein Byte belegt. Du könntest also auch mit einem dynamischen Array of Byte hantieren, dessen Länge Du auf die Stringlänge setzt.
[edit] Andererseits wäre es ja auch egal, wenn man immer 4 Byte-Blöcke belegt, denn dann wäre das Byte hinter dem letzten komplett mit 0 belegt, so dass bei der Rückrechnung #0 herauskäme, das ist ja eh das Stringende-Zeichen. Ich könnte da zwar jetzt einen Denkfehler haben, aber IMO stimmt das schon so. [/edit] |
Re: Umwandlung charkombination nach integer
das problem dabei ist dass ich nur rechenoperationen für strings habe
also die zahlen der form '1234456789' - und immoment würde es ausreichen, für diese gruppe eine möglichkeit zu haben . das mit dem array of byte kommt vlt später. oder wie meintest du das? ps: mir fiel auf, dass bei der rückwandlung zeichen fehlen können |
Re: Umwandlung charkombination nach integer
Betrachten wir das Ganze doch einmal binär. Angenommen, Du hast einen String 'AAAAA'. Das sieht dann so aus:
Code:
Nach der Methode von oben in 4-Byte-Blöcken:
01000001 01000001 01000001 01000001 01000001
A A A A A
Code:
Ich denke mal, das stellt kein großes Problem dar, da #0 wie gesagt das Zeichen für Stringende ist.
01000001 01000001 01000001 01000001 01000001 00000000 00000000 00000000
A A A A A #0 #0 #0 |
Re: Umwandlung charkombination nach integer
keine schlechte idee - ich muss mal sehen, wie ich da mit den operationen hinkomme - die sind nämlich nur für dezimal (stringzahlen)
was mach ich dagegen, dass die oben vorgestellte variante - eine von den ersten - die letzten zeichen entsorgt, wenn die länge nicht durch 4 teilbar ist |
Re: Umwandlung charkombination nach integer
Füll den letzten Teilstring mal mit #0 auf, bis er durch 4 teilbar ist.
[edit] Oder zeig mal, wie Du das umgesetzt hast. [/edit] |
Re: Umwandlung charkombination nach integer
ok geht danke
hier das bisherige
Delphi-Quellcode:
function tform1.rsaenc(text:ansistring;n:ansistring):ansistring;
var l:int64; wa,zahl:ansistring; begin result:=''; mathe:=tmathe.Create; l:=length(text); while l mod 4 <>0 do begin text:=text+chr(0); l:=length(text) end; i:=1; while i<=l do begin application.ProcessMessages; if i mod 4 =0 then begin // wa:=mathe.summe(mathe.produkt(inttostr(ord(text[i])),'256'),inttostr(ord(text[i+1]))); wa:=inttostr(combtonum(text[i-3]+text[i-2]+text[i-1]+text[i])); wa:=mathe.PotenzModulo(wa,e,n); zahl:=wa; if length(zahl)<length(n) then while length(zahl)<>length(n) do zahl:='0'+zahl; result:=result+zahl; end; inc(i); end; end; function tform1.rsadec(text:ansistring;d,n:ansistring):ansistring; var i:int64; wa,z1,z2,z3,m_1,m_2,m,h:ansistring; zahl:ansistring; begin result:=''; m_1:='0'; m_2:='0'; m:='0'; h:='0'; mathe:=tmathe.Create; i:=1; { //chinesischer Restsatz:=>Fehlerhaft!!! dp:=modinvers(e,mathe.Differenz(p,'1')); dq:=modinvers(e,mathe.Differenz(q,'1')); qinv:=modinvers(p,q); } while i<=length(text) do begin application.ProcessMessages; zahl:=copy(text,i,length(n)); wa:=zahl; wa:=mathe.PotenzModulo(wa,d,n); //result:=result+chr(strtoint(mathe.Quotient(wa,'256')))+chr(strtoint(mathe.Modulo(wa,'256'))); result:=result+numtocomb(strtoint(wa)); i:=i+length(n) end; end; function TForm1.numtocomb(num:longint):string; var b1,b2,b3,b4:char; begin result:=''; b1 := Chr(num shr 24); b2 := Chr(num shr 16 and $000000FF); b3 := Chr(num shr 8 and $000000FF); b4 := Chr(num and $000000FF); result:=b1+b2+b3+b4; end; function TForm1.combtonum(comb:string):longint; begin result:=Ord(comb[1]) shl 24 or Ord(comb[2]) shl 16 or Ord(comb[3]) shl 8 or Ord(comb[4]) end; |
Re: Umwandlung charkombination nach integer
noch eine frage: was ist das größte ergebnis, was dabei herauskommen kann
also bei (256,256,256,256)? |
Re: Umwandlung charkombination nach integer
müsste 16843008 sein? - hm nein war falsch
|
Re: Umwandlung charkombination nach integer
Hi,
Hab nochwas:
Delphi-Quellcode:
Gruß
// Speichert maximal 4 Buchstaben in einer Zahl (4 Byte)
function StrToCardinal(S: String): Cardinal; begin Result := PCardinal(S)^; end; // Extrahiert den String aus dem Cardinal function CardinalToStr(C: Cardinal): String; begin SetLength(Result,4); Move(c,Result[1],4); end; // Anwendung: var c: Cardinal; s: String; begin S := 'Test'; c := StrToCardinal(S); Caption := CardinalToStr(c); end; Neutral General |
DP-Maintenance
Dieses Thema wurde von "TBx" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
Im Moment ists noch ne Diskussion, wird vielleicht mal ein Beitrag für die CL ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz