有两个字节存储的端口号,我想以整数形式返回。代码如下:
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&lt;&lt; 8 =&gt; 6400 + 145 =&gt; 6545
但这就是我得到的:25 + 145 =&gt; 145
答案 0 :(得分:1)
您需要将(至少一个)操作数转换为移位操作为更大的数据类型。
来自<<
:
算术移位不是循环的,这意味着在结果的一端移出的位不会在另一端重新引入。在算术左移中,丢弃超出结果数据类型范围的位,并将右侧空出的位位置设置为零。
所以它需要像:
CInt(25) << 8 + 145
答案 1 :(得分:0)
我不确定你的代码是做什么的,不是它应该做的,而是基于你的例子:
Dim result = CInt(req(0)) << 8 Or req(1)
(您也可以使用+
代替Or
,它不会改变一个东西,但使用按位或在这里感觉模糊得多更正确。)
更简单,使用the framework’s builtin methods:
Dim result = CInt(BitConverter.ToInt16(req, 0))