Single→Long変換(ビット配列での変換)
- WindowsXP、Visual Basic 6.0(SP6)を使用して、Single型の浮動小数点数をLong型の整数値に変換したいです。
- 浮動小数点数の内部形式(IEEE)を用いて、Single型のビット列をLong型のビット列として変換します。
- これは、外部機器(PLC等)とのデータのやりとりを行う際に必要で、単純な16ビットデータを整数値として転送することができない状況に直面しているという問題です。
- ベストアンサー
Single→Long変換(ビット配列での変換)
WindowsXP、Visual Basic 6.0(SP6)にて プログラムを作成しております。 やりたいことは、浮動小数点で格納されたSingle型32bitのビット列を、 そのまま整数値に同じビット列として変換したい、ということです。 例えば、12.75であれば、Single浮動小数点の内部形式(IEEE)は 0x414C0000になりますが、この値をそのまま整数値(Long)に変換できればと 考えています。 外部機器(PLC等)と浮動小数点データのやりとりを行う必要があり、 PLCへは単なる16ビットのデータ(0~65535)を整数値として転送するしか ない状況で、上記のような問題に直面しております。 何かアドバイスを頂けますと幸いです。
- hyphenlink
- お礼率0% (0/1)
- Visual Basic
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Private Declare Sub MoveMemory _ Lib "kernel32" Alias "RtlMoveMemory" ( _ ByRef Destination As Any, _ ByRef Source As Any, _ ByVal length As Long _ ) Private Sub Form_Click() Dim a As Single Dim b As Long Dim c(1) As Integer Dim d(3) As Byte a = 12.75 MoveMemory b, a, 4 MsgBox Hex(b) MoveMemory c(0), a, 4 MsgBox Hex(c(0)) & "," & Hex(c(1)) MoveMemory d(0), a, 4 MsgBox Hex(d(0)) & "," & Hex(d(1)) & "," & Hex(d(2)) & "," & Hex(d(3)) End Sub
関連するQ&A
- VBAのsingle,doubleのデータ型のE+,E-
VBAのデータ型longやsingleの E+やE-は何を表しているのでしょうか? 単精度浮動小数点型 3.4028235E+38~などです。 また、single doubleはそれぞれ-3.4028~、-1.797~ などと書いてありますが、1万台で小数点以下の数値がある値、たとえば17,562.256はどのデータ型を使えばよいのでしょうか?
- 締切済み
- オフィス系ソフト
- 10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?
10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか? 10進数の-7.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか? 計算方法を教えてください。
- ベストアンサー
- その他([技術者向] コンピューター)
- sprintf関数での文字列変換について
マイコンにて、 C言語で浮動小数点の数値を表示するプログラムを作成しているのですが、 PRINT_OUT("123.456"); のように、文字列を直接指定した場合は正しく表示されるのですが、 sprintf()関数を用いて、浮動小数点を文字列に変換した場合、 buf char[10]; sprintf(buf,"%lf",123.456); PRINT_OUT(buf); とした場合はプログラムが暴走?(恐らく配列破壊を起こしていると 思われますが、)してしまい、上手く動作しません。 (但し、整数の場合は正常に動作します。) そこで、質問させていただきたいのですが、 "123.456"のように直接文字列を指定した場合と、浮動小数点123.456 をsprintf()関数を用いて文字列に変換した"123.456"の書式に何か 違いはあるのでしょうか?よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- ビットデータをJavaで簡単に扱う方法
Javaでビットデータを簡単に扱う方法を探しています。 次のファイルがあるとします。 ファイルは次のフォーマットで構成されています。 固定長40bit×n 1~6bit:未使用 7~8bit:データ型判断用指標 9~24bit:整数1 25~40bit:整数2 9~40bit:整数3 9~40bit:単精度浮動小数点数 この時、次の条件に則ってファイルから数値データを取得します。 データ型判断用指標がオンオンの時、整数1 データ型判断用指標がオンオフの時、整数2 データ型判断用指標がオフオンの時、整数3 データ型判断用指標がオフオフの時、単精度浮動小数点数 上記を出来れば自前でのビット操作を行わずに実装したいという思いがあり、 いわゆるビットフィールド的な物が無いかと探してみたのですが、 なかなかそれらしき物が見つからずに困っています。 ご存知であればお教えいただければ幸いです。
- ベストアンサー
- Java
- エクセルVBA データ型 SingleとDouble
SingleとDoubleともに、整数部分の範囲についてはどのように 考えればよいのでしょうか?例えば、小数点以下4桁までを正確 に計算できれば良く、変数の値が 54321.**** となる場合は Singleで良いのでしょうか? SingleとDoubleで対応できる、整数部分の範囲を教えてください。 お手数ですが、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 浮動小数点変換
(1)次の数値をIEEE754単精度形式で正規化された浮動小数点に変換し、結果を8桁の16進数で表記しなさい。 (a)0.5 0.5を二進数で表すと0.1 0.1*2^0であるから 0 00000000 10000000000000000000000 (b)1.0 1.0を二進数で表すと1.0 0.1*2^1であるから 0 10000000 10000000000000000000000 (c)1.25 1.25を二進数で表すと1.010 0.101*2^1であるから 0 10000000 10100000000000000000000 浮動小数点への変換、あってますでしょうか? また結果を8桁の16進数で表記とありますが 0.5だったら16進数で表すと0.9?これを8桁*16^なんとか乗で表すということでしょうか?
- ベストアンサー
- ハードウェア・サーバー
- 配列の中の値の型変換
Array => [0] => Array ['id'] => '10' ['size'] => Array ['height'] => '25.1' ['width'] => '10.6' ['length'] => '15.7' ['name'] => 'shose' ['comment'] => '' [1] => Array ['id'] => '10' ['size'] => Array ['height'] => '25.1' ['width'] => '10.6' ['length'] => null ['name'] => 'paper' ['comment'] => 'color is red' 上記のように配列の中の要素の値が全てstring型で、値がない要素だけnullという配列があります。 この配列の全ての文字列を、 整数に変換可能ならint型に変換 浮動小数点型に変換可能ならfloat型に変換 数値に変換不可能ならstring型のまま nullの場合はnullのまま にキャストしたいのですがどのようなコードになるのでしょうか? ネストの深さは一定ではありません。 よろしくお願い致します。
- ベストアンサー
- PHP
- VBAの変数変換のことです
VBAの変数変換のことです 整数変数=実数変数や実数変数=整数変数でCIntやCSng関数を使わないでOKでしょうか? Dim VAR(20) As Single '単精度浮動小数点数型 (Single) Dim IVARO(20) As Integer '整数型 (Integer) Dim IVAROC(20) As Integer '整数型 (Integer) IVARO(NCD) = VAR(NCD) 'Single to Integer IVAROC(NCD) = CInt(VAR(NCD)) 'Single to Integer これで、IVARO(NCD)とIVAROC(NCD)には同じ値が入っているのですが、 整数=実数でCInt関数を使わないで整数にする構文はOKでしょうか?
- ベストアンサー
- Visual Basic
- 三菱PLC(FX3U)の浮動小数点転送について
お世話になります。 三菱PLC(FX3U)の浮動小数点の命令について教えてください。 初歩的な事で申し訳ありませんが、浮動小数点データを転送する場合に、定数を転送する場合はEMOVやDEMOVでやらなければならないのはわかるのですが、浮動小数点データが入っているデータレジスタからデータレジスタに転送(コピー)する場合、MOVやDMOVで転送しても、各ビットがそのままコピーされるのであれば、問題ない気がするのですが、なぜEMOVやDEMOVで転送する必要があるのですか? またFX3Uですと浮動小数点データの比較をしたいときに,不等号で比較が出来ないので、ECMPなど使わなければならなくて、とても面倒くさいです。値の大小関係なく一緒かどうか見るだけであれば[<> D0 D2]みたいに書いても良いでしょうか? 初歩的な質問で申し訳ございませんが、ご教示ください。 よろしくお願い致します。
- 締切済み
- その他(FA・自動化)