Hej! Index i arrayen blir Bitnr>>8 och bitmasken blir 1<<(Bitnr & 7). Tack för svaret! Annars är det just detta som man använder den matematiska operationen AND (som ej skall förväxlas med den logiska operationen AND). Jag gav ju dig den svåra biten, måste jag göra den lätta också... ;) TACK IGEN, DET FUNKAR!!! Index för en bit i arrayen delas upp så här (binärt):Kolla bit i byte array...
Finns det någon som hinner hjälpa mig med en smart funktion för att kolla om en bit i en byte array är false eller true?
TACK!
/Alexander
<code>
Svar = KollaBit(Data,9) //Skall då kolla den biten som är ett.
(Data[1] och längst till höger)!
public bool KollaBit(byte[] Data,int Bitnr)
{
// Data[0] 00000000 7-0
// Data[1] 00000001 15-8
// Data[2] 00000000 23-16
// osv...
}
</code>Sv: Kolla bit i byte array...
Sv:Kolla bit i byte array...
...men jag fattar inte riktigt.
Skulle du kunna utvecka svaret lite mera?Sv: Kolla bit i byte array...
Ex.
MittVarde AND 1 kollar den minst signifikanta biten
MittVarde AND 2 kollar nästa bit
MittVarde AND 3 kollar båda bitarna samtidigt
osvSv: Kolla bit i byte array...
public bool KollaBit(byte[] Data,int Bitnr)
{
return (Data[Bitnr>>3] & (1<<(Bitnr & 7))) != 0;
}
Korrigering:
Index är naturligtvis Bitnr>>3.
Sv:Kolla bit i byte array...
MYCKET SNÄLLT!!!
Men jag skulle vilja fatta varför...
(Data[Bitnr>>3] , Varför flytta 3 steg?
<<(Bitnr & 7))) , Varför en 7:a här?
/AlexanderSv: Kolla bit i byte array...
aaaaaaaaaaaaabbb
aaaaaaaaaaaaa = index i arrayen
bbb = index för biten i byten
För att få a så skiftar man index tre bitar åt höger.
För att få b så plockar man ur de tre lägsta bitarna. Det kan man få genom att göra en and-operation med det binära värdet 111, vilket i decimal form är sju.
Bit nummer 42 har index 41, eller binärt:
0000000000101001
Index i arrayen fås genom att skifta ut de tre lägsta bitarna: ---0000000000101 = 5
Index för biten fås genom and med 111: -------------001 = 1
Bit nummer 42 ligger alltså som andra bit (index 1) i den sjätte byten (index 5).