vb.net - 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 发送相同的函数并制作自己的字节数组时,它确实有效。
解决方案
正如已经指出的那样,您不需要前导零。这里有一些值得思考的东西......
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
推荐阅读
- jquery - 如何在 jQuery 中获取音频文件的 RMS 值
- apache-spark - 如何更改 spark-submit 控制台输出中的日志级别?
- python - 关联规则挖掘算法
- elixir - 如何使用 Elixir 在 Hound 中实现 Chromedriver
- vue.js - 将 vue 组件编译成“普通”网页的一些指针
- javascript - 如何在摩纳哥编辑器中调用`setValue()`后立即格式化代码?
- mysql - 在 Heroku 应用程序中连接到 MySQL 数据库时出现类型错误
- python - 从 Python 调用 C++ 代码,而后者又再次调用 Python(即 Python->C++->Python),这可能吗?
- javascript - 您将如何使按钮在单击时添加文本/标题/段落?
- apache-flink - 使用状态处理器 api 检查 flink 保存点时出现异常