
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
![]() |
|
Сообщ.
#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. |