![]() |
CardinalToBytes + BytesToCardinal
mit folgenden Funktionen kann man eine natürliche Zahl in Bytes umwandeln
z.B. zum versenden über einen socket.
Delphi-Quellcode:
uses Math; function CardinalToBytes(Num:integer):string; var i,k,j:integer; buffer:string; begin j:=ceil(log(num)/log(256)); k:=Power(2,j-1); for i:=1 to j do begin j:=Num DIV k; buffer:=buffer+chr(j); Num:=Num-j*k; k:=k DIV 256; end; Result:=buffer; end;
Delphi-Quellcode:
function BytesToCardinal(Code:string):integer;
var i,k,num:integer; begin k:=1; num:=0; for i:=Length(Code) downto 1 do begin num:=num+ord(Code[i])*k; k:=k*256; end; Result:=num; end; |
Re: CardinalToBytes + BytesToCardinal
ich würde einfach einen variant-Record nehmen oder die bits shiften.
|
Re: CardinalToBytes + BytesToCardinal
Das kann man doch auch einfacher erreichen.
z.B. über einen varianten record oder eine Variablendeklaration mit dem absolute Schlüsselwort (Wenn man ein Byte-Array möchte) oder einfach einmal setlength & copy aufrufen (Wenn man nen String möchte) |
Re: CardinalToBytes + BytesToCardinal
ok zeigt ma bitte :D
|
Re: CardinalToBytes + BytesToCardinal
meine Delphis kennen kein
![]() |
Re: CardinalToBytes + BytesToCardinal
ich ha bschon gescuht aber nix gefunden
habt ihr nen link zum thema ? |
Re: CardinalToBytes + BytesToCardinal
Zitat:
Delphi-Quellcode:
Das wäre jetzt meine erste Idee, wenn ich so eine Funktion schreiben müsste ;)
function CardinalToBytes(const Num: integer):string;
begin setlength(Result, sizeof(integer)); CopyMemory(@Result[1], @num, sizeof(integer)); end; Btw.: Funktionsname und Argument widersprechen sich ;) |
Re: CardinalToBytes + BytesToCardinal
Zitat:
Gruß K-H |
Re: CardinalToBytes + BytesToCardinal
@jfheins: vergiß Delphi 2009/2010 nicht :zwinker:
Delphi-Quellcode:
oder wenn es unbedingt eine Schleife sein muß
function IntegerToChars(const Num: Integer): AnsiString;
begin SetLength(Result, SizeOf(Integer)); CopyMemory(@Result[1], @Num, SizeOf(Integer)); end;
Delphi-Quellcode:
und nach winziger Speicheroptimierung
function IntegerToChars(Num: Integer): String{oder AnsiString};
var i: Integer; begin Result := ''; for i := 1 to SizeOf(Integer) do begin Result := Result + AnsiChar(Num); Num := Num shr 8; end; end;
Delphi-Quellcode:
function IntegerToChars(Num: Integer): String{oder AnsiString};
var i: Integer; begin SetLength(Result, SizeOf(Integer)); for i := 1 to SizeOf(Integer) do begin Result[i] := AnsiChar(Num); Num := Num shr 8; end; end; |
Re: CardinalToBytes + BytesToCardinal
Was soll eigentlich der Sinn dieser ganzen Aktion sein? #0-Chars werden nicht vermieden, also kann man doch gleich einen
Delphi-Quellcode:
und einen Type cast tcharint(myinteger) nehmen.
type tcharint = packed array[0..sizeof(integer)-1] of ansichar;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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 by Thomas Breitkreuz