![]() |
StrToBin <> BinToStr
Hallo, diesen Code habe ich im Internet gefunden:
Delphi-Quellcode:
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?
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; |
Re: StrToBin <> BinToStr
Du liest 8 Bit aus deinen String zusammen un hast dann ein Byte. ;)
![]() oder: ![]() oder dort: ![]() Also die DP-Suche. ;) |
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:
Aufruf:
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;
Delphi-Quellcode:
Normalerweise müsste im Memo ein "M" zu sehen sein, wenn ich 01001101 ins Edit schreibe, aber es kommt
Memo7.Text := BinToStr(StrToInt(Edit7.Text));
eine Binärzahl zurück :? |
Re: StrToBin <> BinToStr
Versuch es mal so:
Delphi-Quellcode:
Aufruf dann so:
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;
Delphi-Quellcode:
, falls ich Dich richtig verstanden habe.
Memo7.Text := Chr(BitsToByte(Edit7.Text));
|
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..) |
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)));
|
Re: StrToBin <> BinToStr
Zitat:
Also ich weis nicht was du mit interessant meinst. |
Re: StrToBin <> BinToStr
Du hast den String "0100000101000010", willst aber nur die Stellen 9 bis 16 wandeln. Die meinte ich mit "interessantem Teil".
|
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.
|
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. |
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