Расширяемый шестнадцатеричный адрес в Visual Basic - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблемы с внедрением расширенного шестнадцатеричного значения в мой проект. Когда я набираю &H000007F0 в своем проекте Visual Basic, Visual Studio переходит и сокращает его до &H7F0. В нормальной ситуации это было бы хорошо, но мне нужно, чтобы предыдущие 0 были включены в качестве параметра для функции в API.

Я пытался создать ее как строку Dim MastID As String = "000007F0", а затем преобразовать в гекс Convert.ToUInt32(MastID, 16), но это не сработало так, как я думал. Есть ли другие способы, которые я могу попробовать или настройки VS17, которые я могу выключить / включить, которые позволят мне получить полный &H000007F0?

Я делаю это, чтобы попытаться подключиться к ведомому устройству на шине CAN. Я использую API, который имеет свои собственные функции для управления устройством CAN и инициализации канала CAN. Если я смогу передать расширенный идентификатор & 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, используемый идентификатор устройства равен 7F0h, поэтому ведомое устройство не отвечает сообщением подтверждения. Однако он работает, когда я отправляю ту же функцию с расширенным главным идентификатором, когда я создаю свой собственный байтовый массив.

1 Ответ

0 голосов
/ 13 ноября 2018

Как уже указывалось, вам не нужны начальные нули.Вот пища для размышлений ...

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...