... der die Werte einer Variable als Bitfolge darstellt. ... Nur klappt das irgendwie nicht. Ich bekomme keine Bits z. B. eines Single ausgelesen. Geht das überhaupt?
Delphi-Quellcode:
function BinToStr(pmValue: Pointer; pmTypeInfo: Pointer): String;
const
CHAR_MAP: array[Boolean] of Byte = (48, 49); // 0, 1
var
i: Integer;
isBit: Boolean;
bitCount: Integer;
rttiType: TRttiType;
begin
Result := '';
if pmValue = Nil then Exit; //=>
if pmTypeInfo = Nil then Exit; //=>
rttiType := TRttiContext.Create.GetType(pmTypeInfo);
if rttiType <> Nil then
begin
bitCount := rttiType.TypeSize * 8;
SetLength(Result, bitCount);
for i := 0 to bitCount - 1 do
begin
isBit := (PByteArray(pmValue)[i shr 3] and (1 shl (i and 7)) <> 0);
Result[bitCount - i] := Chr(CHAR_MAP[isBit]);
end;
end;
end;
begin
var i: Integer := 5;
ShowMessage(BinToStr(@i, TypeInfo(Integer))); // Ausgabe: 00000000000000000000000000000101
var d: Single := 50.0;
ShowMessage(BinToStr(@d, TypeInfo(Single))); // Ausgabe: 01000010010010000000000000000000
Bis bald...
Thomas