![]() |
das bit eines bytes auf 1 setzen
hey,
ich versuche mich gerade an einem steganografie-programm (für die schule) und ich komme einfach nicht mehr weiter .. könnt ihr mir sagen, wie ich möglichst einfach & elegant ein bestimmtes bit eines bytes auf 1 setzen kann ? wenn da ein string wäre könnte ich ja einfach machen :
Delphi-Quellcode:
oder sowas
i : integer ;
i[8] := 1 ; aber das geht bei integer's ja nicht ... ein bzw. das letzte bit auf Null zu setzen ist ja kein problem. Da hab ich durch recherschieren herausgefunden, dass man einfach
Delphi-Quellcode:
machen kann und schon ist das letzte bit null
i := i shr 1 ;
i := i shl 1 ; aber mit 1 geht das auch nicht ... könnt ihr mir da helfen ? (in einer facharbeit über steganografie hab ich das hier gefunden :
Delphi-Quellcode:
aber ich versteh nicht was Value or $80 bedeuten soll...
function setze(Value: Byte; Stelle: Byte): Byte;
begin case Stelle of 1: Result:=Value or $80; 2: Result:=Value or $40; 3: Result:=Value or $20; 4: Result:=Value or $10; 5: Result:=Value or $08; 6: Result:=Value or $04; 7: Result:=Value or $02; 8: Result:=Value or $01; else result:=0; end; end; ich weiß auch nicht, wie ich danach bei google suchen soll... falls das der einfachste weg ist, könnt ihr mir erklären, was das bedeutet ? ) ich hoffe ihr könnt mir helfen .. danke schonmal |
AW: das bit eines bytes auf 1 setzen
Zitat:
Code:
Value or $80 macht also nichts anderes, als das (von rechts) 8. Bit auf 1 zu setzen
0 or 0 = 0
0 or 1 = 1 1 or 0 = 1 1 or 1 = 1
Code:
Value: 100101010010
$80 10000000 or 100111010010 |
AW: das bit eines bytes auf 1 setzen
Wenn du dir das ganze Binär anschaust, wird es wahrscheinlich deutlicher:
$80 = 10000000 (binär) Wenn du jetzt das erste Bit auf 1 setzen willst, passiert z.B. bei der Zahl 0 folgendes
Code:
Das gleiche nochmal mit der Zahl (82 = $52 = 1010010 (binär))
00000000 (die 0)
or 10000000 (die $80) -------- 10000000 ( = 128)
Code:
Hoffe, das bringt dich etwas weiter. Schau der am Besten auch mal die anderen Zahl ($40, ...) in Binär an.
01010010 (die 82)
or 10000000 (die $80) -------- 11010010 ( = 210) [Edit] Red-Box hat wohl schon Feierabend :gruebel: [/Edit] |
AW: das bit eines bytes auf 1 setzen
danke für die schnelle antwort
ja ihr habt mir echt geholfen dabei hatten wir heute sogar im unterricht über xor gesprochen ich hatte irgendwie einen denkfehler ich dachte das Value or $80 würde heißen "gib entweder Value ODER $80 zurück" danke :) |
AW: das bit eines bytes auf 1 setzen
|
AW: das bit eines bytes auf 1 setzen
|
AW: das bit eines bytes auf 1 setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
// demo zu "BitStream.pas"
var i : Integer; BitStream : TBitStream; BitString : String; const BitAsChar: Array[TBitValue] of Char = ('0', '1'); begin BitStream := TBitStream.Create; try BitStream.DigitCount := 32; { Bits setzen } for i := 0 to 7 do BitStream.Digits[i] := bitIsSet; BitStream.WriteWord( 8, 0 ); BitStream.WriteByte( 24, $FF ); { Bits auslesen und string befüllen } SetLength( BitString, BitStream.DigitCount ); for i := 1 to BitStream.DigitCount do BitString[BitStream.DigitCount-i+1] := BitAsChar[BitStream.Digits[i-1]]; { Ausgabe } ShowMessage( 'Bitstream:'#13#10 + BitString ); finally BitStream.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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