1

我想获取一个字节的前 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)

4

3 回答 3

6

在组合位之前,您需要将位左移UpperLogicalLocation8 位:

int UpperLogicalLocation = 0x51;
int UnderLogicalLocation = 0x23;

int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8;   // Take bit 0-3 and shift
LogicalLocation |= UnderLogicalLocation;

Console.WriteLine(LogicalLocation.ToString("x"));

请注意,我也更改+=|=更好地表达正在发生的事情。

于 2013-06-24T08:17:27.293 回答
3

问题是您将高位存储到 0-3 位LogicalLocation而不是 8-11 位。您需要将这些位移到正确的位置。以下更改应该可以解决问题:

int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8;

另请注意,使用逻辑或运算符更惯用地组合这些位。所以你的第二行变成:

LogicalLocation |= UnderLogicalLocation;
于 2013-06-24T08:20:08.623 回答
3

你可以这样做:

int LogicalLocation = (UpperLogicalLocation & 0x0F) << 8;   // Take bit 0-3
LogicalLocation |= (UnderLogicalLocation & 0xFF);

...但要小心字节顺序!您的文档说UpperLogicalLocation应该存储在 中Byte 3,接下来的 8 位在Byte 4. 做到这一点,int LogicalLocation需要将结果正确拆分为这两个字节。

于 2013-06-24T08:20:46.663 回答