На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> как собрать 4 байта в single
    Здраствуйте!
    Кто может подсказать как собрать 4 байта которые передает прибор в одну переменную типа single в VBnet 2012? Так же нужно разделить переменную single на 4 байта.
      я попробовал вот таким образом.
      ExpandedWrap disabled
        Public Declare Function GetMem4 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) As Long
        Private ModZ As Single
        Private ModZ1(3) As Byte
        GetMem4(ModZ1(0), ModZ)


      Но выдает ошибку
      Сообщение отредактировано: Songrim -
        ExpandedWrap disabled
          Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long
          Цитата TheTrik @
          ExpandedWrap disabled
            Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long

          Выдает что AsAny в операторах Declare не подерживается
            Цитата Songrim @
            Цитата TheTrik @
            ExpandedWrap disabled
              Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long

            Выдает что AsAny в операторах Declare не подерживается

            Какой язык программирования?
              Visual Studio 2012, Basic
                В vb.net можно объединить single с четырёхбайтовым массивом в Union.
                  Цитата Mikle @
                  В vb.net можно объединить single с четырёхбайтовым массивом в Union.

                  А как это можно сделать? Хотелось бы увидеть примеры кода.
                    У меня сейчас на компе не установлена VS, но в сети есть примеры, например:
                    https://www.vbforums.com/showthread.php?761...claration-valid
                      Цитата Mikle @
                      У меня сейчас на компе не установлена VS, но в сети есть примеры, например:
                      https://www.vbforums.com/showthread.php?761...claration-valid

                      не разобрался... Еще нашел в интернете описание класса BitConverter, вроде это подойдет, но я не могу его найти VS2012 Basic. Кто может подсказать как это сделать.
                        В любом ЯП есть конструкт "сдвиг по фазебитовый", схематично чтото типа
                        ExpandedWrap disabled
                          Private uint_iModZ As UInteger
                          Private ModZ As Single
                          Private ModZ1(3) As Byte
                          uint_iModZ = ModZ1(0) << 24 + ModZ1(1) << 16 + ModZ1(2) << 8 + ModZ1(3)
                          ModZ = CType(uint_iModZ, Single)
                          Попал за комп с VB.NET и вспомнил про топик. Если ещё актуально, новый проект, код формы:

                          ExpandedWrap disabled
                            Imports System.Runtime.InteropServices
                             
                            Public Class Form1
                                Private Structure Bytes4
                                    Dim b0 As Byte
                                    Dim b1 As Byte
                                    Dim b2 As Byte
                                    Dim b3 As Byte
                                End Structure
                             
                                <StructLayout(LayoutKind.Explicit)> Private Structure SingleAnd4Bytes
                                    <FieldOffset(0)> Dim Bytes As Bytes4
                                    <FieldOffset(0)> Dim Float As Single
                                End Structure
                             
                                Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
                                    Dim Test As SingleAnd4Bytes
                             
                                    Test.Float = Val(InputBox("Input Float Value"))
                                    MsgBox("Bytes:" & Str(Test.Bytes.b0) & Str(Test.Bytes.b1) & Str(Test.Bytes.b2) & Str(Test.Bytes.b3))
                                End Sub
                            End Class


                          Это разборка Single на байты. Точно так же работает и в обратную сторону - записываем в структуру нужные байты и читаем Single значение в поле Float.
                          Сообщение отредактировано: Mikle -
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0410 ]   [ 16 queries used ]   [ Generated: 8.02.25, 10:04 GMT ]