Byte型配列をSingle型に変換するには?

解決


はな  2004-01-19 20:39:34  No: 81579  IP: [192.*.*.*]

最近VBをはじめた者です。
Byte型配列からSingle型やInteger型への
変換方法がわからないので,どなたか教えていただけませんか?

実際にやっている内容は,
LinuxプログラムとVBプログラムでシリアル通信を行っていて,
通信データをVBプログラムでByte型配列で受信します。
※Byte型配列で受信するのはボード固有の関数の仕様
通信データのフォーマットは,文字,整数,浮動少数,
が混在しています。

編集 削除
初心者  2004-01-19 23:24:22  No: 81580  IP: [192.*.*.*]

初心者掲示板より
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200307/03070021.txt

編集 削除
魔界の仮面弁士  2004-01-20 02:02:29  No: 81581  IP: [192.*.*.*]

> 最近VBをはじめた者です。
という事は、VB.NETでしょうか。

.NETの場合は、「System.BitConverter クラス」を使ってみてください。
ToSingleメソッドを使って、Byte配列をSingle値に変換できます。

   Dim B() As Byte = {37, 82, 154, 68}
   Dim S As Single = System.BitConverter.ToSingle(B, 0)

--------
旧いバージョン(VB6以下、もしくはVBA)を使っている場合は、
ユーザー定義型とLSetステートメントを使って変換できます。

Option Explicit

Private Type B4
    B(3) As Byte
End Type

Private Type S1
    S As Single
End Type

Private Sub Form_Load()
    Dim X As B4
    Dim Y As S1

    X.B(0) = 37
    X.B(1) = 82
    X.B(2) = 154
    X.B(3) = 68
    
    LSet Y = X
    
    Debug.Print Y.S
End Sub

編集 削除
はな  2004-01-20 13:16:45  No: 81582  IP: [192.*.*.*]

初心者さん,魔界の仮面弁士さん,
回答どうもありがとうございました。m(__)m
VBはソフトが古くVB6だったので,LSetを使う方法,
CopyMemoryというAPIを使う方法,
どちらも試してうまくいきました。
ソフトはもうすぐVB.NETに替えないといけなさそうなので
その時,System.BitConverter クラスも参考にさせて
いただきます。
本当にどうもありがとうございました!

編集 削除