したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

■■■20レス以内で済むF-BASICの質問はこちらへ■■■

599598:2015/06/06(土) 07:41:31
>>597
サンプルプログラムを例示します。(「構造体」を使った例)
 倍精度浮動小数点が、x86系CPUのWindowsアプリでよく使われる形式であると
みなし、受信データを「構造体」を使って倍精度浮動小数点型の変数に、
メモリ上でバイナリそのままで転記して取り出しています。

※CALLEVENT と#include "WINDOWS.BI" は必要なければはずしてください。

[注]:字下げのために全角空白を使ってます。半角に置き換えてください
#include "WINDOWS.BI"
#include "F1A0LWIC.BI" '<--ライブラリが必要な場合

'24Byte長レコード(8Bytex3)
type T_RCVDT
  X as double
  Y as double
  Z as double
end type

'データ受入用(バイナリ24Byte)
type T_RCVDT_WK
  DT as string * 24
end type

var RCVDT as T_RCVDT
var BUFWK as T_RCVDT_WK

baud 0,9600
open "COM0:" for input as #1

do while eof(1) '受信開始待ち
  CALLEVENT
loop

'1件分データ入力(24Byte)までループ
do
  if lof(1) >= 24 then
    ' 1件の受信データ読み込み(バイナリ)
    BUFWK.DT = INPUT$(24, #1)
    ' 構造体を通してバイナリを各変数に格納
    LSET RCVDT = BUFWK

    exit do 'ループ脱出
  end if
  CALLEVENT
loop

close #1
'データを画面に表示
print "X="; RCVDT.X
print "Y="; RCVDT.Y
print "Z="; RCVDT.Z


 浮動小数点の形式が異なるため、エラーや数値がでたらめになる場合はとりあえず、
「X as double」などを「X as string * 8」などに書き換え、
変換関数のどれか適切なものを使って「CVD(RCVDT.X)」、倍精度の実数に変換
してみてください。
注意:CVD関数以外は数値変換拡張ライブラリ「F1A0LC63.LIB」が必要。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板