[リストへもどる]
一括表示

投稿時間:2003/04/20(Sun) 15:03
投稿者名:西一
Eメール:
URL :
タイトル:
バイナリ モード でリードしたデータについて。
こんにちは、皆さん。

バイナリーモードで読み込んだファイルの文字列部分を変換されずに文字列として取得する方法は
どの様にすればよいでしょうか…

ファイルとしては、
08 00 08 00 18 00 00 00 4F 52 49 47 47 4E 41 4C ……
~~~~~~~@~~~~~~~~~~~~~~ ~~~~~~~~~~~A~~~~~~~~~~

@の部分はキー部分なので、HEXで使用します。
Aの部分はデータの値なので文字列で使用します。

-----------------------------------------------------------------------------
  Const fileinfo  As String = "T:\&&DownLoad\143210000.DCM"
  Dim Mychar            As String
  Dim Mybyte            As Byte
  Dim MyHex

  Open fileinfo For Binary As #1 ' ファイルを開きます。
  Do While Not LOF(1)            ' ファイルの終端までループを繰り返します。
     Get #1, , Mybyte            ' 1 文字のデータを読み込みます。
     MyHex = HEX(Mybyte)         'Hexに変換

  '-- @のキー部分のマッチング処理
  '-- Aの文字列の表示等の処理


  Loop
  Close
-----------------------------------------------------------------------------
ファイルを読み込んだ場合、MybyteはHEX→数値に変換されて格納されます。
18→24
数値にされた値をHEXで数値→HEXに変換しています。
24→18
文字列の部分
4F 52 49 47 47 4E 41 4C をO R I G I N Aとして取得する方法はどうすれば
良いでしょうか?

投稿時間:2003/04/20(Sun) 17:36
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: バイナリ モード でリードしたデータについて。
"&H"を付加してChr関数を使ってみては?

投稿時間:2003/04/20(Sun) 20:58
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: バイナリ モード でリードしたデータについて。
> 4F 52 49 47 47 4E 41 4C をO R I G I N Aとして取得する方法はどうすれば

丸文字は機種依存で文字化けの恐れがあるので使わない方が良いですよ。

例えば
08 00 08 00 18 00 00 00 4F 52 49 47 47 4E 41 4C  の16バイトのみを
"c:\test1.bin" に書いておいて、

Form1 に Label1 と  Label2 を置いて下記コード

Private Sub Form_Load()

Dim bStr As String
Dim tmp As String

Dim H As InType
Dim f As Integer
Dim i As Integer

f = FreeFile

Open "c:\test1.bin" For Binary As #1
  Get #f, , H
Close #f

tmp = ""
For i = 1 To 7
    tmp = tmp & Right("0" & Hex(H.a(i)), 2) & " "
Next i
    tmp = tmp & Right("0" & Hex(H.a(8)), 2)

bStr = H.b

Label1.Caption = tmp
Label2.Caption = bStr

End Sub


標準モジュールを作成して下記コード。

Type InType 'Len = 16
    a(8) As Byte
    b As String * 8
End Type

投稿時間:2003/04/20(Sun) 23:40
投稿者名:西一
Eメール:
URL :
タイトル:
Re: バイナリ モード でリードしたデータについて。
こんにちは、nanashiさん、nobuさん 皆さん。

早速の回答有難う御座います。

大分悩みましたが、nobuさんの教えて頂いた通りにすると
上手く行きそうです。
大変助かりました。
有難う御座いました。