首页 > 解决方案 > Visual Basic 中的扩展十六进制地址

问题描述

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

我尝试将它创建为字符串Dim MastID As String = "000007F0",然后转换为 hex 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 BUS,使用的设备 ID 是 7F0h,因此从设备没有响应确认消息。但是,当我使用扩展主 ID 发送相同的函数并制作自己的字节数组时,它确实有效。

标签: vb.netvisual-studiovisual-studio-2017

解决方案


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

    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

推荐阅读