Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String To Byte ... (https://www.delphipraxis.net/109386-string-byte.html)

cherry 29. Feb 2008 10:52


String To Byte ...
 
Hi

Wie mache ich aus einem enzelnen Buchstaben eine Binären Wert?

zb. StrToByte('A') ergibt '00101011' ?

gibts sowas, kann man das machen?

DeddyH 29. Feb 2008 10:57

Re: String To Byte ...
 
Einen String oder ein einzelnes Zeichen?

s-off 29. Feb 2008 10:59

Re: String To Byte ...
 
Hallo,

Delphi-Quellcode:
Function ChrToBin(_Chr: Char): String;
Var
   i: Integer;
Begin
   For i := SizeOf(_Chr) * 8 - 1 Downto 0 Do
      Result := Format('%s%d', [Result, Byte((Ord(_Chr) And (1 Shl i)) <> 0)]);
End;
Edit: Für nen ganzen String musst Dir das dann halt zusammenpuzzlen.

Union 29. Feb 2008 11:11

Re: String To Byte ...
 
Oder auch so:
Delphi-Quellcode:
function CharToBin(AChar : char): string;
var
  i: Integer;
begin
  SetLength(result, 8);
  for i := 1 to 8 do
  begin
    if ((Byte(AChar) shl (i-1)) shr 7) = 0 then
      result[i] := '0'
    else
      result[i] := '1';
  end;
end;

cherry 29. Feb 2008 11:47

Re: String To Byte ...
 
Vielen Dank euch beiden...

das Beispiel von "Union" verstehe ich besser... verwtehe eigentlich alles bis auf byte ( "if ((Byte(AChar) shl (i-1)) shr 7) = 0 then" )

was berwirkt dieses byte dort genau?

DeddyH 29. Feb 2008 11:57

Re: String To Byte ...
 
Das ist ein Typecast auf Byte, damit aus 'A' 65 wird.

cherry 29. Feb 2008 12:07

Re: String To Byte ...
 
:oops: Danke euch allen!

Kroko1999 29. Feb 2008 12:25

Re: String To Byte ...
 
nur mal so zum Verständnis
Titel: String to Byte: geht gar nicht
Titel: Char To Byte: per Chr(Char);
Titel: Char to BinärString: s.o.

SirThornberry 29. Feb 2008 12:26

Re: String To Byte ...
 
Titel: Char To Byte: per Char(Char);

dann ist es ein richtiger Typecast und nicht nur ein Funktionsaufruf.

Matze 29. Feb 2008 12:52

Re: String To Byte ...
 
Zitat:

Zitat von DeddyH
Das ist ein Typecast auf Byte, damit aus 'A' 65 wird.

Anstelle des Typecasts kann man übrigens auch die Funktion Delphi-Referenz durchsuchenOrd nutzen, was s-off macht.

DeddyH 29. Feb 2008 13:15

Re: String To Byte ...
 
Das war aber nicht die Frage :)

Matze 29. Feb 2008 13:26

Re: String To Byte ...
 
Er hat "Byte()" nicht verstanden und daraufhin erwähne ich eine Funktion, die das gleiche macht und die er evtl kennt.

Aber nun zurück zum Thema.

cherry 29. Feb 2008 13:36

Re: String To Byte ...
 
Ich hab soeben beide Funktionen getestet:

Also die Funktion von "Union" versteh ich zwar einigermassen, funktioniert aber leider nicht wirklich...
respektive ich erhalte bei fast allen Zeichen die ich umwandle "0111111"...

Die Funktion von "s-off" scheint zu funktionieren. Da habe ich aber mühe beim verstehen. Kann mir die jmd auskommentieren?
wäre echt toll.. Ich will keinen Code verwenden den ich nicht verstehe!

und

Zitat:

DeddyH hat folgendes geschrieben:
Das ist ein Typecast auf Byte, damit aus 'A' 65 wird.

Anstelle des Typecasts kann man übrigens auch die Funktion Ord nutzen, was s-off macht.
Er verwendet aber beides?! :

Delphi-Quellcode:
For i := SizeOf(_Chr) * 8 - 1 Downto 0 Do
      Result := Format('%s%d', [Result, Byte((Ord(_Chr) And (1 Shl i)) <> 0)]);

Muetze1 29. Feb 2008 13:46

Re: String To Byte ...
 
Union shiftet in die falsche Richtung. Bei einem Byte mit 8 Bits ist schlecht mit um 7 Bits nach links zu shiften, die fallen dann gleich mal weg...

Und um den Prozessor nicht unnötig hin- und hershiften zu lassen, nur damit ein paar Bits überfallen, kann man auch gleich maskieren für das letzte Bit:

Delphi-Quellcode:
function CharToBin(AChar : char): string;
var
  i: Integer;
begin
  SetLength(result, 8);
  for i := 1 to 8 do
  begin
    if (Byte(AChar) shr (8-i)) and 1 = 0 then
      result[i] := '0'
    else
      result[i] := '1';
  end;
end;

Union 29. Feb 2008 13:58

Re: String To Byte ...
 
Zitat:

Union shiftet in die falsche Richtung
:oops: Das kommt davon wenn man posted ohne vorher zu testenm sorry. Und die Optimierung mit and gefällt mir auch...

cherry 29. Feb 2008 14:08

Re: String To Byte ...
 
ok also mit "and" gehts nun...
und ich glaub ich kappiers sogar... :stupid:


Und kann mir trotzdem noch mal jmd diese Vprgehensweise erklären?
Delphi-Quellcode:
Result := Format('%s%d', [Result, Byte((Ord(_Chr) And (1 Shl i)) <> 0)]);

Union 29. Feb 2008 14:20

Re: String To Byte ...
 
Das ist vom Prinzip das Selbe, nur langsamer ;)
Es wird immer eine "0" oder eine "1" abhängig vom Ergebnis an das result angehängt.

Delphi-Quellcode:
        Platzhalter für result %s - string
        |  Platzhalter für Byte... Ausdruck %d - integer
        |  |   Array der Werte, mit denen die Platzhalter gefüllt werden sollen
        |  |   |
Format('%s%d', [Result, Byte((Ord(_Chr) And (1 Shl i)) <> 0)]);
Alternativ:
Delphi-Quellcode:
result := result+inttostr(integer((Ord(_Chr) And (1 Shl i)) <> 0))

cherry 29. Feb 2008 15:08

Re: String To Byte ...
 
Ok, ich kappiers ungefähr. Vielen Dank euch allen...

schönes Wochenende euch freaks
8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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