Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10914 / 76734 ←次へ | 前へ→

【71363】Re:10進数から2進数への高速変換
発言  ichinose  - 12/2/25(土) 1:17 -

引用なし
パスワード
   ▼kein さん:

>私がやりたいのはIEEE形式倍精度浮動小数点フォーマット(以下、IEEE)で
>記録されているバイナリファイルを読み込んで10進数表記のテキストに
>変換するということです。
なるほど・・・。

では、こんなコードを実行して試してみてください。

新規ブックの標準モジュールにて、

Sub バイナリファイルの作成()
  Dim dbl(1 To 3) As Double
  Dim fno As Long
  dbl(1) = 0.111
  dbl(2) = 3
  dbl(3) = 4
  '書き込むデータは上記の配列です
  fno = FreeFile
  
  Open ThisWorkbook.Path & "\sample.bin" For Binary As #fno
  Put #1, , dbl()
  Close #fno
End Sub

ThisWorkbook.Path を使っていますから、名前を付けて保存してから、
上記のコードを実行してください。


ブックと同じフォルダ上に sample.binというファイルが作成されます。

バイナリエディタを使えば、中身をHEXイメージで見ることが出来ますから、
見てみてください。

ファイルのプロパティを見れば、サイズが24バイトと表示されているはずです。
当然ですよね? 
倍精度浮動小数点データを3つ書き込んでいますから、
3*8=24バイトですね!!

バイナリエディタで中身をみると、以下のようなHEXイメージが表示されます。

D1 22 DB F9 7E 6A BC 3F 00 00 00 00 00 00 08 40
00 00 00 00 00 00 10 40

いかがですか? 想像したような値ですか?

最初の8バイト(D1 22 DB F9 7E 6A BC 3F)で0.111 という数字を表していることに
なるのですが、最初のハーフバイトは、Dです。2進数では、1101ですね?

>1ビット目が符号
と仰っていましたが、1ですね? 0.111は、正の数なのに・・・。
実は、ディスク上では、逆に記録されているので本当は、

3F BC 6A 7E F9 DB 22 D1 なんです。

これが、0.111なんです。


ですから、Byte変数で読み込んだ場合は、そのまま、
D1 22 DB F9 7E 6A BC 3F の順序で読み込んでしまいますから、

その辺りも考慮しなければなりません。

が、倍精度浮動小数点のデータだけだと分かっているなら・・・、

Sub バイナリファイルの読み込み()
  Dim g0 As Long
  Dim dbl() As Double
  Dim fno As Long
  fno = FreeFile
  Open ThisWorkbook.Path & "\sample.bin" For Binary As #fno
  ReDim dbl(1 To LOF(fno) / 8)
  Get #1, , dbl()
  Close #fno
  For g0 = LBound(dbl()) To UBound(dbl())
    MsgBox g0 & "番目の数字は、  " & dbl(g0)
  Next
  MsgBox "終わり"
End Sub

こんなコードで値は、取得できます。

こういうことですか?

17 hits

【71339】10進数から2進数への高速変換 kein 12/2/22(水) 23:14 質問
【71340】Re:10進数から2進数への高速変換 kanabun 12/2/23(木) 0:20 発言
【71341】Re:10進数から2進数への高速変換 ちん 12/2/23(木) 0:34 発言
【71344】Re:10進数から2進数への高速変換 kanabun 12/2/23(木) 17:11 発言
【71345】Re:10進数から2進数への高速変換 kein 12/2/23(木) 20:55 お礼
【71354】Re:10進数から2進数への高速変換 yoko 12/2/24(金) 17:44 発言
【71355】Re:10進数から2進数への高速変換 ichinose 12/2/24(金) 18:07 発言
【71360】Re:10進数から2進数への高速変換 kein 12/2/24(金) 23:45 質問
【71363】Re:10進数から2進数への高速変換 ichinose 12/2/25(土) 1:17 発言
【71364】Re:10進数から2進数への高速変換 ichinose 12/2/25(土) 1:41 発言
【71365】Re:10進数から2進数への高速変換 kein 12/2/25(土) 2:05 お礼
【71367】二箇所訂正です ichinose 12/2/25(土) 11:23 発言

10914 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free