Visual Basic中扩展的十六进制地址

时间:2018-11-13 18:47:23

标签: vb.net visual-studio visual-studio-2017

我无法在项目中实现扩展的十六进制值。当我在Visual Basic项目中键入&H000007F0时,Visual Studio会将其缩短为&H7F0。在正常情况下,这很好,但是我需要将前面的0包括在内作为API函数的参数。

我曾尝试将其创建为字符串Dim MastID As String = "000007F0",然后转换为十六进制Convert.ToUInt32(MastID, 16),但这并不像我想象的那样有效。还有其他可以尝试的方法,还是可以关闭/打开的VS17设置,可以让我拥有完整的&H000007F0

我这样做是为了尝试连接到CAN总线上的从设备。我使用的API具有自己的功能,可以控制CAN设备和初始化CAN通道。如果我能够传递扩展ID&H000007F0,则API将使用这些参数初始化CAN通道。

为从属数据设置的参数:

SlaveData.BroadcastID = &H18DAA1E1
SlaveData.MasterID = &H7F0
SlaveData.SlaveID = &H7F2
SlaveData.IncrementalIdUsed = False

正在使用的功能:

Public Shared Function Connect(
   ByVal Handle As UInt32,
   ByVal Mode As Byte,
   ) As Result ' Returns no errors
End Function

分析CAN总线时,使用的设备ID为7F0h,因此从设备不会以确认消息进行响应。但是,当我使用扩展的主ID发送自己的字节数组发送相同的功能时,它确实起作用。

1 个答案:

答案 0 :(得分:0)

正如已经指出的那样,您不需要前导零。这里有一些值得深思的地方...

    Dim foo As UInt32 = &H7F0 'note missing 0's

    '  or
    Dim provider As Globalization.CultureInfo = Globalization.CultureInfo.CurrentCulture
    Dim styles As Globalization.NumberStyles = Globalization.NumberStyles.HexNumber
    Dim bar As UInt32
    Dim s As String = "000007F0" 'note leading 0's
    If UInt32.TryParse(s, styles, provider, bar) Then
        If foo = bar Then
            Stop ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        End If
    End If