我无法在项目中实现扩展的十六进制值。当我在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发送自己的字节数组发送相同的功能时,它确实起作用。
答案 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