Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Array of Boolean -> Byte-Variable
MrFox - Sa 09.07.05 19:50
Titel: Array of Boolean -> Byte-Variable
Hi Leute,
Ich möchte ein Array[0..7] of Boolean, das 1 Byte repräsentiert in eine BYTE variable umwandeln
(um daraus wiederrum einen Buchstaben werden zu lassen)
Jetzt hab ich mir da schon so 'ne Funktion geschrieben, da funktioniert aber irgendwas nicht...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var wert:byte; bytes:Array[0..7] of Boolean;
...
for i := 7 downto 0 do begin wert := wert shl 1; if bytes[i] = true then wert := wert or 1 else wert := wert or 0; end; |
maxk - Sa 09.07.05 20:07
Also, eigentlich sollte es gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var wert:byte; bytes:Array[0..7] of Boolean;
wert:=0; for i := 7 downto 0 do begin wert:=wert shl 1; if bytes[i] then Inc(Wert); end; |
ManuelGS - Sa 09.07.05 20:10
@maxk, muss man da nicht der variable wert vorher 0 zugewiesen werden? fängt ja sonst vielleicht mit 5 etc. an.
maxk - Sa 09.07.05 20:12
Stimmt, ich hatte mich da gerade selber ein bisschen verwirrt. Aber nach 100mal editieren, glaube ich meine Endfassung gefunden zu haben ;)
ManuelGS - Sa 09.07.05 20:26
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var wert:byte; bytes:Array[0..7] of Boolean; i:integer;
begin bytes[0]:=true; bytes[1]:=true; bytes[2]:=true; bytes[3]:=false; bytes[4]:=false; bytes[5]:=false; bytes[6]:=true; bytes[7]:=false; wert:=0; for i := 0 to 7 do begin wert:=wert shl 1; if bytes[i] then wert:=wert or 1;
end; showmessage(inttostr(wert)); |
maxk - Sa 09.07.05 21:38
11100010b ist aber 226d - und das ermittelt auch der Code ;)
ManuelGS - Sa 09.07.05 22:05
262 ist eine sogenannte "Manuelzahl". Man berechnet sie, indem man die Ziffern einer beliebigen Zahl z nimmt, und in zufälliger Reihenfolge anordnet.
Hast du das etwa nicht gewusst? :wink:
lol
BenBE - Sa 09.07.05 22:53
Leichtere Möglichkeit:
Delphi-Quelltext
1:
| type TBitSet = set of 0..7; |
Danach einfach
Include(Bits, BitNumber); um das
BitNumber-te Bit zu einer Zahl hinzuzufügen oder
Exclude(Bits, BitNumber); um das
BitNumber-te Bit aus einer Zahl zu entfernen.
In ein Byte wird das ganze dann mit
ByteVal := Byte(TBitSet(Bits)); konvertiert.
maxk - So 10.07.05 00:03
ManuelGS hat folgendes geschrieben: |
262 ist eine sogenannte "Manuelzahl". Man berechnet sie, indem man die Ziffern einer beliebigen Zahl z nimmt, und in zufälliger Reihenfolge anordnet. |
Das steht in meiner nächsten Infoklausur ;)
@BenBE: Verblüffent einfach :autsch:
MrFox - So 10.07.05 11:23
Hab den Fehler selbst gefunden. Meine Funktion war völlig richtig, ich bin das ganze bloß in der falschen Richtung durchgegangen.
Trotzdem Danke für die zahlreichen "Anregungen"
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!