2011-07-05 11 views
0

私は512要素のバイト配列を持ち、この配列のバイトの1ビットを取得して設定する必要があります。vb.netを使用してバイト配列の単一ビットを取得して設定する

オペレーションは、他のビットを変更してはならず、指定されたビットのみを変更してはなりません。

私は& B00110011のようなバイトを持っており、1に第3のビットを変更したいのであれば、それは& B00110111でなければなりません。

このよう

:3番目のバイトのバイト

myarrayの(3).2 = 1 --->これは、第3のビットを変更することになる(0からカウント開始)として

薄暗いのmyarrayの(511) 〜1

ビットマスキングを使用すると簡単に可能になるはずですが、動作させるには数日間試してみる時間がありません。

ありがとうございました!

あなたがBitArray classを使用していないのはなぜ月

答えて

1

+0

こともできますが、値は、単一ビットではありません。簡単にビットの状態を取得するには、ISSETがブール値である場合には、多くのビットを設定するようなものです。 – dbasnett

4

これを行う簡単な方法はシフトを使用することです。

mask = 1 << n ' if n is 3, mask results in 00001000 
bytevalue = bytevalue or mask 

が0としてビットを設定するには:あなたが1に多数のN番目のビットを設定したい場合は、両方の例で

mask = 255 - (1 << n) ' if n is 3, mask results in 11110111 
bytevalue = bytevalue and mask 

bytevalueをあなたが変更したいバイトであり、 maskも1バイトです。

EDIT:あなたは

mask = 1 << n ' just as above 
IsSet = (bytevalue and mask) <> 0 
+0

これは簡単ですね。そして状態を簡単に得る方法? – Jan

+1

状態を取得する関数が正しくありません。 ...!= 0はvb.netでは不可能です。 <> 0を使用すると、設定されているビットに-1が返されます。あなたはそれを修正しますか? –

+0

@ user831915:申し訳ありませんが、私はもうVBで動作しません。私は言語を嫌いですが、ビットマスクなどは面白い話題です。 –

関連する問題