0

Hello I'am new to using bytes in C#.

Say if I want to compare bytes based on the forms 0xxxxxxx and 1xxxxxxx. How would I get that first value for my comparison and at the same time remove it from the front?

Any help will be greatly appreciated.

Emre801
  • 3,043
  • 5
  • 25
  • 28

3 Answers3

1

Not sure I understand, but in C#, to write the binaray number 1000'0000, you must use hex notation. So to check if the left-most (most significant) bits of two bytes match, you can do e.g.

byte a = ...;
byte b = ...;

if ((a & 0x80) == (b & 0x80))
{
  // match
}
else
{
  // opposite
}

This uses bit-wise AND. To clear the most significant bit, you may use:

byte aModified = (byte)(a & 0x7f);

or if you want to assign back to a again:

a &= 0x7f;
Jeppe Stig Nielsen
  • 60,409
  • 11
  • 110
  • 181
0

You need to use binary operations like

a&10000
a<<1
MarcinJuraszek
  • 124,003
  • 15
  • 196
  • 263
MichaelT
  • 7,574
  • 8
  • 34
  • 47
0

This will check two bytes and compare each bit. If the bit is the same, it will clear that bit.

     static void Main(string[] args)
    {
        byte byte1 = 255;
        byte byte2 = 255;

        for (var i = 0; i <= 7; i++)
        {
            if ((byte1 & (1 << i)) == (byte2 & (1 << i)))
            {
                // position i in byte1 is the same as position i in byte2

                // clear bit that is the same in both numbers
                ClearBit(ref byte1, i);
                ClearBit(ref byte2, i);
            }
            else
            {
                // if not the same.. do something here
            }

            Console.WriteLine(Convert.ToString(byte1, 2).PadLeft(8, '0'));
        }
        Console.ReadKey();
    }

    private static void ClearBit(ref byte value, int position)
    {
        value = (byte)(value & ~(1 << position));
    }
}
d.moncada
  • 16,900
  • 5
  • 53
  • 82