您好,我是在 C# 中使用字节的新手。
假设我想根据 0xxxxxxx 和 1xxxxxxx 的形式比较字节。我如何获得第一个值进行比较,同时从前面删除它?
任何帮助将不胜感激。
不确定我是否理解,但在 C# 中,要编写二进制数 1000'0000,您必须使用十六进制表示法。因此,要检查两个字节的最左边(最高有效)位是否匹配,您可以执行例如
byte a = ...;
byte b = ...;
if ((a & 0x80) == (b & 0x80))
{
// match
}
else
{
// opposite
}
这使用按位与。要清除最高有效位,您可以使用:
byte aModified = (byte)(a & 0x7f);
或者如果您想a
再次分配回:
a &= 0x7f;
这将检查两个字节并比较每个位。如果该位相同,它将清除该位。
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));
}
}
您需要使用二进制操作,例如
a&10000
a<<1