VB2005で単精度実数を変換する方法とは?

このQ&Aのポイント
  • VB2005で単精度実数を変換する方法について詳しく教えてください。
  • VB2005のプログラムで2WORD(単精度実数)デバイスを数値に変換する方法を教えてください。
  • VB2005で作成中のアプリで、PLCデバイスの2WORDデータを取り込み数値に変換する方法を教えてください。
回答を見る
  • ベストアンサー

VB2005で単精度実数を変換するには?

VB2005で単精度実数を変換するには? 三菱のシーケンサとパソコンをEther通信させてパソコンでPLCデバイスを読み取り表示するアプリを VB2005で作成中です。 今、行き詰っているのが2WORD(単精度実数)デバイスを取り込んで数値に変換する所です。 PLCからは例えばD0000デバイスに数値の1.1が入っている場合は下記のようになります。 D0000 : (CCCD)h D0001 : (3F8C)h ↑単精度実数の1.1です。 "CCCD" "3F8C" を1.1に変換するにはどのような処理を行えば良いでしょうか? おわかりの方、すみませんがよろしくお願いします。

  • OVERQ
  • お礼率84% (87/103)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

/* ハードウェア系のコード書いた事ないけど、この手のコードで役に立つようだといいなあ */ namespace Q5694485 { class MainClass { public static void Main (string[] args) { System.Single single = System.BitConverter.ToSingle(System.BitConverter.GetBytes(System.Convert.ToInt32("3F8CCCCD",16)),0); System.Console.WriteLine(single); return; } } }

OVERQ
質問者

お礼

ご回答ありがとうございます。 当方VB2005だったのですが、下記コードでバッチリうまくいきました! dim sngRet as single; sngRet = System.BitConverter.ToSingle(System.BitConverter.GetBytes(System.Convert.ToInt32("3F8CCCCD", 16)), 0) sngRetに希望通りの実数値が入りました・・・嬉しいです! はまってただけに、大変助かりました。 このたびはどうも有り難うございました。

関連するQ&A

  • Fortranの倍精度実数について

    こんにちは。 現在、Fortran 90でプログラムを作成しています。 その中で、整数の倍精度実数への型変換についての疑問がわきましたので、質問させていただきます。 以下の2つのプログラムで、計算がより速く、より精度よくできるのはAとBどちらなのでしょうか。 実際は下記のプログラムが、ループの中に入っているので少しでも計算時間を短くしたいのです。 よろしくお願いいたします。 program A(毎回dxを足す) ----------------------------- real(8) :: pi, dx real(8), dimension(1000) :: x integer i, j pi=atan(1d0)*4d0 dx=pi/5000d0 x=0d0 j=1 do i=1, 1000 x(i)=x(j)+dx j=i write(*,*)x(i) end do ----------------------------- program B(毎回dx*ループ回数を計算する) ----------------------------- real(8) :: pi, dx real(8), dimension(1000) :: x integer i, j pi=atan(1d0)*4d0 dx=pi/5000d0 x=0d0 do i=1, 1000 x(i)=dx*dble(i) write(*,*)x(i) end do -----------------------------

  • [perl] 実数からdouble型のバイナリデータに変換したい

    何度もすみません またわからないところがありましたので質問させて下さい 10進数の実数からdouble型に変換するやり方が分かりません 例えば 0.001 -> 3E 41 89 37 4B C6 A7 F0 のような感じです おそらくルーチンを組まなければならないと思うので、考え方・概略だけでも構いません お願いいたします

  • sqlをDB間で変換する

    C言語やVBをC#に変換するツール等はよく見かけますが、SqlServerのsqlをOracle等に変換するツールはありませんか?精度が低くでもよいので、お願いします。

  • 10進数の実数値の値を32ビットで表す16進法に変換したいのですが

    10進数の実数値の値を32ビットで表す16進法に変換したいのですが 方法がわかりません。 例えば10進(1.23)を16進(70A43F9D)に変換したいのです。 ご存知の方がいらっしゃいましたら宜しくお願いいたします。 環境は、VB2005です。

  • 3次方程式の実数解の個数のプログラムについて…

    C++で、3次方程式の実数解の個数を調べるプログラムを作ってみた(↓)のですが、実行したときに問題点があって困っています。 #include<stdio.h> #include<math.h> void main(void) /*3次方程式の実数解の個数*/ { double a,b,c,d,D,A,B; printf("f(x)=a*pow(x,3)+b*pow(x,2)+c*x+d=0 に対して、a,b,c,dの値を定めると、\n"); scanf("%lf %lf %lf %lf",&a,&b,&c,&d); D=4*pow(b,2)-12*a*c; A=(-b+sqrt(b*b-3*a*c))/(3*a); B=(-b-sqrt(b*b-3*a*c))/(3*a); if(a>0) if(D<=0 || (D>0 && A>0) || (D>0 && B<0)) printf("実数解の個数は1個\n"); else if(A<0 && B>0) printf("実数解の個数は3個\n"); else printf("実数解の個数は2個\n"); else a=-a; b=-b; c=-c; d=-d; if(D<=0 || (D>0 && A>0) || (D>0 && B<0)) printf("実数解の個数は1個\n"); else if(A<0 && B>0) printf("実数解の個数は3個\n"); else printf("実数解の個数は2個\n"); その問題点というのは、実数解の個数が2個と3個のときは、実行したときの結果として、 実数解の個数は2個 Press any key to continue あるいは 実数解の個数は3個 Press any key to continue と正しく表示されるのですが、実数解の個数が1個のときは、 実数解の個数は1個 実数解の個数は1個 Press any key to continue と「実数解の個数は1個」が2回表示されてしまうのです。 なぜ、2回表示されるのか分かりません。 初心者なので、できるだけ詳しい解決法などよろしくお願い致します。

  • Visual Basic 2008 Express Editionで可能ですか?

    以前からVBや、C++など興味があり、 最近不況で業務が少なくなり、この時期だ! とVisualBasic(Ver.6)の勉強をはじめました。 するとインターネット上でVB2008Ex‥Ed…が無償でありました。(2.6MBくらいのファイル) 学習用等には最適とありますが、購入するものと何か機能が不足しているのでしょうか? 質問の履歴検索でいろいろあって結局ちょっとよくわからいのが本音です。 まえおきが長くてすみません。 私がVBでやりたいことは、 PLC(シーケンサ)と232C(又はEthernet)でPLCの内部デバイスにアクセス(読み書き)したいんです。 それと、PLCから読んだデータをCSV形式(というんでしょうか) でファイルに保存して、あとでEXCELなどで編集したい ということです。 Visual Basic 2008 Express Editionで上記なことは可能なのでしょうか。 また、別になにかソフト(ドライバ等)が必要ですか? 初歩的な質問ですみませんが、 宜しくお願いします。

  • 回転の合成変換について

    単位立方体をy軸周りに45度回転(Ry(45)と表示)後、x軸周りに30度回転(Rx(30)と表示)させるとき、下記の設問に答えよ。ただし、sin30=0.5, cos30=0.87,sin45=0.7とする。 単位立方体の頂点座標はA(0,0,1),B(1,0,1),C(1,1,1), (0,1,1),E(1,0,0),F(1,1,0), G(0,1,0), H(0,0,0)とする。作図は頂点A-B-C-D-A、B-E-F-C-B、C-F-G-D-C、E-F-G-H-E、D-G-H-A-D、A-H-E-B-Aを線で結ぶ。 二つの回転の合成変換行列の式と計算結果を行列で記入しなさい。 という問題で、 T = Rx (30) Ry (45) = [] [] = [] [] ←の中を埋める答え方なんですけどさっぱりわかりません。 []の中は縦横共に3列ずつ入ります 誰かお力添えお願いします(><) 0.7 0 0.7 0.7 0.87 -0.35  ここまでは計算できたんですけど違うかもしれません。 -0.6 7 6    どちらにしろ、=の1個前の[]に入る数値がわかりません

  • バイナリから実数を取得したいのですが・・・

    C++にてバイナリデータから倍精度の浮動小数を取得したいと考えています。 バイナリの中にリトルエンディアン形式で倍精度の浮動小数が64ビット幅に収められています。 これをdouble型の変数に代入したいのですが、どうすれば(できれば簡単な方法で)値を代入できるでしょうか? ご教授お願いします。 データのサンプルを念のために記載させて頂きます。 B2 9C 05 DA 7D 40 6C 3F -> 3.448720745086919e-3

  • パソコンとPLCの接続

    パソコンとPLCをethernetでつないでシーケンサー内のデーターを 読み込みたいと思っています。(つながってはいるようです) パソコン側はVBでプログラムを組もうと思っているのですが 誰か、参考になるプログラムを教えて下さい 三菱のQシリーズです。 取り説を何冊か読んだらうまくいきました ありがとうございました

  • UNIX フォートラン 数値計算精度

    フォートランでの数値計算精度に関して困っております。 サンマイクロシステムズ社製、UNIX、Solaris10(64bit)において、 下のフォートランプログラム、 IMPLICIT REAL*8(A-H,O-Z) X=1.0D0 A=SIN(X) WRITE(*,100)A 100 FORMAT(F50.40) STOP END を実行させると、 A=0.8414709848078965048756572286947630345821 となり、16桁以降にも数値が出てきます。 これはなぜでしょうか? UNIXコンパイラの特徴なのでしょうか?

専門家に質問してみよう