私は赤の1バイト、緑の1バイト、青の1バイトをとる方法があり、赤のバイトの最後の3ビットを抽出すると、緑のバイトの最後の2ビットと青のバイトの最後の3ビットは、どのように私はこれを達成するだろうか?私は以下のコードを使用していましたが、完全には機能していません。私はここで間違って何をしていますか?バイトから値を取得する
private const byte InverseBlueMask = 7; // 00000111
private const byte InverseGreenMask = 3; // 00000011
private const byte InverseRedMask = 7; // 00000111
//private const byte InverseBValueMask = 31; // 00011111
//private const byte InverseGValueMask = 231; // 11100111
//private const byte InverseRValueMask = 248; // 11111000
public void getEachBitOfMessage(byte byteToManipulate, int colour)
{
byte value = 0;
byte returnByte = 0;
if (colour == BLUE)
{
value = (byte)(byteToManipulate | BValueMask);
value = (byte)(value >> 5);
returnByte = (byte)(byteToManipulate | InverseBlueMask);
returnByte = (byte)(returnByte & value);
String theByte = returnByte.ToString();
}
else if (colour == GREEN)
{
value = (byte)(byteToManipulate | GValueMask);
value = (byte)(value >> 3);
returnByte = (byte)(byteToManipulate | InverseGreenMask);
returnByte = (byte)(returnByte & value);
String theByte = returnByte.ToString();
}
else if (colour == RED)
{
value = (byte)(byteToManipulate | RValueMask);
returnByte = (byte)(byteToManipulate | InverseRedMask);
returnByte = (byte)(returnByte & value);
String theByte = returnByte.ToString();
}
}
これはiは色の各バイトにメッセージのビットを置くために使用する方法です。
private const byte BlueMask = 248; // 11111000
private const byte GreenMask = 252; // 11111100
private const byte RedMask = 248; // 11111000
private const byte BValueMask = 224; // 11100000
private const byte GValueMask = 24; // 00011000
private const byte RValueMask = 7; // 00000111
public byte changeEachBit(byte byteToManipulate, int colour, byte theMessage)
{
byte value = 0;
byte returnByte = 0;
if (colour == BLUE)
{
value= (byte)(theMessage & BValueMask);
value = (byte)(value >> 5);
returnByte = (byte)(byteToManipulate & BlueMask);
returnByte = (byte)(returnByte | value);
}
else if (colour == GREEN)
{
value = (byte)(theMessage & GValueMask);
value = (byte)(value >> 3);
returnByte = (byte)(byteToManipulate & GreenMask);
returnByte = (byte)(returnByte | value);
}
else if (colour == RED)
{
value = (byte)(theMessage & RValueMask);
returnByte = (byte)(byteToManipulate & RedMask);
returnByte = (byte)(returnByte | value);
}
}
ジャスト提案:ビットマスクは六角で読むことがはるかに簡単です。 – John3136
私はまだ混乱していますが、私の答えは正しいと思います。赤(たとえば上記の2つ)を取得するには、red = someValと0x07を使用します。真剣に:あなたが他人にしていることを説明しようとすると、あなたはその問題を見つけるのを助けるかもしれません。これまでの説明は、ビット操作における些細な練習であるはずのものにとって、大変複雑なようです。 – John3136