![]() |
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? |
Re: String To Byte ...
Einen String oder ein einzelnes Zeichen?
|
Re: String To Byte ...
Hallo,
Delphi-Quellcode:
Edit: Für nen ganzen String musst Dir das dann halt zusammenpuzzlen.
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; |
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; |
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? |
Re: String To Byte ...
Das ist ein Typecast auf Byte, damit aus 'A' 65 wird.
|
Re: String To Byte ...
:oops: Danke euch allen!
|
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. |
Re: String To Byte ...
Titel: Char To Byte: per Char(Char);
dann ist es ein richtiger Typecast und nicht nur ein Funktionsaufruf. |
Re: String To Byte ...
Zitat:
![]() |
Re: String To Byte ...
Das war aber nicht die Frage :)
|
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. |
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:
Delphi-Quellcode:
For i := SizeOf(_Chr) * 8 - 1 Downto 0 Do
Result := Format('%s%d', [Result, Byte((Ord(_Chr) And (1 Shl i)) <> 0)]); |
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; |
Re: String To Byte ...
Zitat:
|
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)]);
|
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:
Alternativ:
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)]);
Delphi-Quellcode:
result := result+inttostr(integer((Ord(_Chr) And (1 Shl i)) <> 0))
|
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