0

您好,我是在 C# 中使用字节的新手。

假设我想根据 0xxxxxxx 和 1xxxxxxx 的形式比较字节。我如何获得第一个值进行比较,同时从前面删除它?

任何帮助将不胜感激。

4

3 回答 3

1

不确定我是否理解,但在 C# 中,要编写二进制数 1000'0000,您必须使用十六进制表示法。因此,要检查两个字节的最左边(最高有效)位是否匹配,您可以执行例如

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

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

这使用按位与。要清除最高有效位,您可以使用:

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

或者如果您想a再次分配回:

a &= 0x7f;
于 2013-09-06T19:27:29.987 回答
0

这将检查两个字节并比较每个位。如果该位相同,它将清除该位。

     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));
    }
}
于 2013-09-06T20:25:48.813 回答
0

您需要使用二进制操作,例如

a&10000
a<<1
于 2013-09-06T19:19:12.780 回答