 как собрать 4 байта в single
    как собрать 4 байта в single
    
  |  | Наши проекты: Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту | |
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.107] | 
|   | 
 | 
 как собрать 4 байта в single
    как собрать 4 байта в single
    
  | 
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         | |
|  |  Здраствуйте! Кто может подсказать как собрать 4 байта которые передает прибор в одну переменную типа single в VBnet 2012? Так же нужно разделить переменную single на 4 байта. | 
| 
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         | |
|  |  я попробовал вот таким образом.   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) Но выдает ошибку | 
| 
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         | |
|  |   Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long | 
| 
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         | |
|  | Цитата TheTrik @    Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long Выдает что AsAny в операторах Declare не подерживается | 
| 
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         | |
|  | Цитата Songrim @  Цитата TheTrik @    Public Declare Function GetMem4 Lib "msvbvm60" (ByRef pSrc As Any, ByRef pDst As Any) As Long Выдает что AsAny в операторах Declare не подерживается Какой язык программирования? | 
| 
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         | |
|  |  Visual Studio 2012, Basic   | 
|   | 
         
         
          
           Сообщ.
           #7
          
          , 
          
         
         | 
|  |  В vb.net можно объединить single с четырёхбайтовым массивом в Union.   | 
| 
         
         
          
           Сообщ.
           #8
          
          , 
          
         
         | |
|  | Цитата Mikle @  В vb.net можно объединить single с четырёхбайтовым массивом в Union. А как это можно сделать? Хотелось бы увидеть примеры кода. | 
|   | 
         
         
          
           Сообщ.
           #9
          
          , 
          
         
         | 
|  |  У меня сейчас на компе не установлена VS, но в сети есть примеры, например: https://www.vbforums.com/showthread.php?761...claration-valid | 
| 
         
         
          
           Сообщ.
           #10
          
          , 
          
         
         | |
|  | Цитата Mikle @  У меня сейчас на компе не установлена VS, но в сети есть примеры, например: https://www.vbforums.com/showthread.php?761...claration-valid не разобрался... Еще нашел в интернете описание класса BitConverter, вроде это подойдет, но я не могу его найти VS2012 Basic. Кто может подсказать как это сделать. | 
| 
         
         
          
           Сообщ.
           #11
          
          , 
          
         
         | |
|  |  В любом ЯП есть конструкт "сдвиг    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) | 
|   | 
         
         
          
           Сообщ.
           #12
          
          , 
          
         
         | 
|  |  Попал за комп с VB.NET и вспомнил про топик. Если ещё актуально, новый проект, код формы:   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. |