Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#57

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 2. Feb 2013, 13:33
Aber damit es weiter geht, hier ein Konverter Text zu BitString:

Delphi-Quellcode:
function TextToBitStr(Str: string): string;

    function ByteToBits(B: Byte): string;
    var
      i: Integer;
    begin
      Result := '';
      for i := 0 to 7 do
        Result := IntToStr(((B shr i) and 1)) + Result;
    end;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(Str) do
    Result := Result + ByteToBits(Ord(Str[i]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(TextToBitStr('Hallo Welt!'));
end;
Ergebnis:

Code:
0100100001100001011011000110110001101111001000000101011101100101011011000111010000100001
Und damit das auch mit Unicode oder WideString funktioniert:
Delphi-Quellcode:
function CharToBits(c: Char): string;
const
  BITS_PER_BYTE = 8;
  BITVALUES: array[Boolean] of char = ('0', '1');
var
  i, BitWidth: integer;
  AsNumber: Cardinal;
begin
  BitWidth := BITS_PER_BYTE * SizeOf(c);
  SetLength(Result, BitWidth);
  AsNumber := Cardinal(c);
  for i := BitWidth downto 1 do
    begin
      Result[i] := BITVALUES[(AsNumber and 1) = 1];
      AsNumber := AsNumber shr 1;
    end;
end;

function StrToBits(const s: string): string;
var
  i: integer;
begin
  Result := '';
  for i := 1 to Length(s) do
    Result := Result + CharToBits(s[i]);
end;
Ich bin nicht sicher, ob es auch Codierungen mit mehr als 4 Byte je Zeichen gibt. Falls ja, müsste man AsNumber halt als int64 deklarieren und entsprechend casten.
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