AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Umwandlung charkombination nach integer

Ein Thema von qwertz543221 · begonnen am 2. Sep 2009 · letzter Beitrag vom 4. Sep 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.554 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:24
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#12

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:29
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.554 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:38
Betrachten wir das Ganze doch einmal binär. Angenommen, Du hast einen String 'AAAAA'. Das sieht dann so aus:
Code:
01000001 01000001 01000001 01000001 01000001
    A       A       A       A       A
Nach der Methode von oben in 4-Byte-Blöcken:
Code:
01000001 01000001 01000001 01000001 01000001 00000000 00000000 00000000
    A       A       A       A       A      #0       #0       #0
Ich denke mal, das stellt kein großes Problem dar, da #0 wie gesagt das Zeichen für Stringende ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#14

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:46
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.554 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:51
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#16

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 20:59
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;
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#17

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 21:09
noch eine frage: was ist das größte ergebnis, was dabei herauskommen kann

also bei (256,256,256,256)?
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#18

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 21:12
müsste 16843008 sein? - hm nein war falsch
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: Umwandlung charkombination nach integer

  Alt 2. Sep 2009, 21:16
Hi,

Hab nochwas:

Delphi-Quellcode:
// 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;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
4. Sep 2009, 20:04
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 ...
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz