-1

在不转换值的情况下C#VB.NET如何检索值的DWORD低位Int64

我已经阅读了这个SO 问题,但我仍然不清楚,我与 合作VB.NET,无论如何,答案是:

在许多语言中,您需要做的就是将其转换为 Int32。最高位将被丢弃。

这似乎只适用于C#将其转换为整数:

((int)LongValue)

VB.NET似乎不是因为我试图强制转换它并且我得到了一个典型的算术溢出异常。

我有一个这样的方法来获得一个低阶词Integer

Public Shared Function GetLoWord(ByVal value As Integer) As Short

    If Value And &H8000I Then
        Return CShort(Value Or &HFFFF0000I)
    Else
        Return CShort(Value And &HFFFFI)
    End If

End Function

现在我想为 a 编写相同的方法Long来检索 low- DWORD,那么我该如何继续编写呢?:

''' <summary>
''' Gets the low-order double word of an 'Int64' value.
''' </summary>
''' <param name="Value">Indicates the 'Int64' value that contains both the LoDword and the HiDword.</param>
''' <returns>The return value is the low-order double word.</returns>
Public Shared Function GetLoDword(ByVal value As Long) As Integer

    ' Code goes here...

End Function
4

1 回答 1

1

位操作是您所需要的。

您在代码中看到的是屏蔽。您可以使用掩码和“与”运算符来获取范围内的分配位。因此,对于低位双字,您需要一个掩码,其值代表一个双字的所有位。这是 2 ^ 32,或者只是 0xFFFFFFFF。

如果您需要高阶 dword,则可以使用移位运算符。

对于有符号值,您需要考虑最高位,如果它是负值,则为 1。

于 2014-03-09T01:32:11.700 回答