Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StrToBin <> BinToStr (https://www.delphipraxis.net/100891-strtobin-bintostr.html)

Tommy1988 5. Okt 2007 02:17


StrToBin <> BinToStr
 
Hallo, diesen Code habe ich im Internet gefunden:

Delphi-Quellcode:
function BitToChar(Ch: Char; Bit: TBit): Char;
begin
  Result:= IntToStr((Byte(Ch) shr (Bit - 1)) and 1)[1];
end;

function StringToBin(const s: string): string;
var
  p, q: Integer;
begin
  for p:= 1 to Length(s) do
    for q:= High(TBit) downto Low(TBit) do
      Result:= Result + BitToChar(s[p], q)
end;
Er wandelt einen String in Binäres um. Klappt soweit und ich verstehe es auch. nur was ich NICHT verstehe ist, wie man es umgekehrt machen kann?

turboPASCAL 5. Okt 2007 03:13

Re: StrToBin <> BinToStr
 
Du liest 8 Bit aus deinen String zusammen un hast dann ein Byte. ;)

http://www.delphipraxis.net/internal...?p=79963#79963

oder: BitsToByte

oder dort: http://www.delphipraxis.net/internal...=752948#752948

Also die DP-Suche. ;)

Tommy1988 5. Okt 2007 11:42

Re: StrToBin <> BinToStr
 
Mhh.. das mit dem BitsToBytes ist mir fremd.
Was passiert denn da genau, weil ich verstehe es nicht richtig.

Edit:
Folgendes gefunden
Delphi-Quellcode:
function BinToStr(b: Byte): String;
var I: Integer;
begin
  setlength(result, 8);
  for I:=0 to 7 do
    result[I+1]:=chr((b shr (7-I)) and 1+48);
end;
Aufruf:
Delphi-Quellcode:
Memo7.Text := BinToStr(StrToInt(Edit7.Text));
Normalerweise müsste im Memo ein "M" zu sehen sein, wenn ich 01001101 ins Edit schreibe, aber es kommt
eine Binärzahl zurück :?

DeddyH 5. Okt 2007 12:38

Re: StrToBin <> BinToStr
 
Versuch es mal so:
Delphi-Quellcode:
function BitsToByte(const ABit: string): Byte;
var i: integer;
    sBit: byte;
begin
  sBit := 1;
  Result := 0;
  for i := Length(ABit) downto 1 do
    begin
      if ABit[i] <> '0' then
        Result := Result or sBit;
      sBit := sBit shl 1;
    end;
end;
Aufruf dann so:
Delphi-Quellcode:
Memo7.Text := Chr(BitsToByte(Edit7.Text));
, falls ich Dich richtig verstanden habe.

Tommy1988 5. Okt 2007 12:57

Re: StrToBin <> BinToStr
 
Ok, das klappt soweit.

Eine Frage dann noch, welche zeile ist dafür zuständig, dass wenn ich
"0100000101000010" (AB) eingebe, nur das "B" umgewandelt wird :? (Also statt beide..)

DeddyH 5. Okt 2007 12:59

Re: StrToBin <> BinToStr
 
Da musst Du Dir den interessanten Teil vorher rauskopieren.
Delphi-Quellcode:
Memo7.Text := Chr(BitsToByte(Copy(Edit7.Text,9,Length(Edit7.Text)));

Tommy1988 5. Okt 2007 13:02

Re: StrToBin <> BinToStr
 
Zitat:

Zitat von DeddyH
Da musst Du Dir den interessanten Teil vorher rauskopieren.

Das vertsehe ich nicht.
Also ich weis nicht was du mit interessant meinst.

DeddyH 5. Okt 2007 13:08

Re: StrToBin <> BinToStr
 
Du hast den String "0100000101000010", willst aber nur die Stellen 9 bis 16 wandeln. Die meinte ich mit "interessantem Teil".

Tommy1988 5. Okt 2007 13:14

Re: StrToBin <> BinToStr
 
Ahhh =) ne genau andersrum. Ich wollte alle wandeln. Da hab ich gefragt, welche Zeile dafür zuständig ist, dass nur die letzten Stellen gewandelt werden.

DeddyH 5. Okt 2007 13:16

Re: StrToBin <> BinToStr
 
Der Rückgabewert meiner Funktion ist Byte, d.h. es passen nur 8 zu wandelnde Bits hinein. Schreib Dir doch eine Prozedur außenrum, die den String in Teile zu je 8 Bits aufteilt und diese durch meine Funktion schickt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 1 von 2  1 2      

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