0

有一个端口号存储在两个字节中,我想将它作为整数返回。这里的代码:

Dim PORT As Integer
PORT = (req.Skip(req.Skip(4).Take(1).ToArray()(0) + 5).Take(1).ToArray()(0) << 8) + req.Skip(req.Skip(4).Take(1).ToArray()(0) + 6).Take(1).ToArray()(0)

但这不起作用。我该如何解决?

结果应该是这样的:25 << 8 => 6400 + 145 => 6545

但这就是我得到的:25 + 145 => 145

4

2 回答 2

1

您需要将(至少一个)您的操作数转换为移位操作到更大的数据类型。

来自<<

算术移位不是循环的,这意味着从结果的一端移出的位不会在另一端重新引入。在算术左移中,超出结果数据类型范围的位移位将被丢弃,并且右侧空出的位位置设置为零。

所以它需要是这样的:

CInt(25) << 8 + 145
于 2012-12-21T10:52:33.203 回答
0

我不确定您的代码是做什么的,而不是它应该做什么,而是基于您的示例:

Dim result = CInt(req(0)) << 8 Or req(1)

(您也可以使用+而不是Or,它不会改变任何事情,但使用按位或在这里感觉更正确。)

更简单的是,使用框架的内置方法

Dim result = CInt(BitConverter.ToInt16(req, 0))
于 2012-12-21T10:46:15.263 回答