我想取一个字节的前4位和另一位的所有位并将它们相互附加。
这是我需要实现的结果:
这就是我现在所拥有的:
private void ParseLocation(int UpperLogicalLocation, int UnderLogicalLocation)
{
int LogicalLocation = UpperLogicalLocation & 0x0F; // Take bit 0-3
LogicalLocation += UnderLogicalLocation;
}
但这并没有给出正确的结果。
int UpperLogicalLocation_Offset = 0x51;
int UnderLogicalLocation = 0x23;
int LogicalLocation = UpperLogicalLocation & 0x0F; // Take bit 0-3
LogicalLocation += UnderLogicalLocation;
Console.Write(LogicalLocation);
这应该给出0x51(0101 0001 )+ 0x23(00100011),
所以我想要实现的结果是0001 + 00100011 = 000100100011(0x123)
答案 0 :(得分:6)
在组合位之前,您需要将UpperLogicalLocation
位左移8:
int UpperLogicalLocation = 0x51;
int UnderLogicalLocation = 0x23;
int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8; // Take bit 0-3 and shift
LogicalLocation |= UnderLogicalLocation;
Console.WriteLine(LogicalLocation.ToString("x"));
请注意,我还将+=
更改为|=
,以便更好地表达正在发生的事情。
答案 1 :(得分:3)
问题是你将高位存储到LogicalLocation
的0-3位而不是8-11位。您需要将位移到正确的位置。以下更改应解决问题:
int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8;
另请注意,使用逻辑运算符或运算符更加惯用地组合这些位。所以你的第二行变成了:
LogicalLocation |= UnderLogicalLocation;
答案 2 :(得分:3)
你可以这样做:
int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8; // Take bit 0-3
LogicalLocation |= (UnderLogicalLocation & 0xFF);
...但要注意字节序!您的文档说UpperLogicalLocation
应存储在Byte 3
中,Byte 4
中的后8位。要做到这一点,生成的int LogicalLocation
需要正确地分成这两个字节。