【发布时间】:2021-01-27 10:10:39
【问题描述】:
我不知道为什么在读取我的字节时我得到了错误的位。我遵循了一些在这里找到的迹象,但它不起作用。我给你看我的代码:
byte[] byte22And23 = _packet.ReadBytes(2);
DataFromGTAPackets.Packet8.ControlFlags.rightEngineSmoke = _packet.GetBit(byte22And23[0], 0);
DataFromGTAPackets.Packet8.ControlFlags.leftEngineSmoke = _packet.GetBit(byte22And23[0], 1);
DataFromGTAPackets.Packet8.ControlFlags.rightEngineFire = _packet.GetBit(byte22And23[0], 2);
DataFromGTAPackets.Packet8.ControlFlags.leftEngineFire = _packet.GetBit(byte22And23[0], 3);
DataFromGTAPackets.Packet8.ControlFlags.rightRotorFail = _packet.GetBit(byte22And23[0], 4);
DataFromGTAPackets.Packet8.ControlFlags.leftRotorFail = _packet.GetBit(byte22And23[0], 5);
etc...
public bool GetBit(byte b, int bitNumber)
{
bool bit = (b & (1 << bitNumber - 1)) != 0;
return bit;
}
我的字节 22 的值为 2,它是:00000010。我的字节 23 的值为 0。当我使用此代码读取字节 22 时,我的第三个变量(rightEngineFire)变得“真”(1 )。毫无意义,显然是错误的。但是不知道怎么回事。
谢谢!
【问题讨论】:
-
如果
bitNumber == 0,你会转移多少?