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

投稿時間:2004/07/07(Wed) 14:57
投稿者名:あきこ
Eメール:
URL :
タイトル:
バイナリエディタ
VBでバイナリエディタを作らないといけなくなったんですが、
どうやって読み込んだらいいのかわかりません。
Cとか使わないと無理?
教えてください。具体的な答えだと嬉しいです。

投稿時間:2004/07/07(Wed) 15:16
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: バイナリエディタ
Openステートメントを使ってバイナリ形式で読み込んで下さい。
ヘルプに載ってます。

投稿時間:2004/07/08(Thu) 14:17
投稿者名:あきこ
Eメール:
URL :
タイトル:
ありがとうございました
頑張ってみます

投稿時間:2004/07/10(Sat) 11:25
投稿者名:あきこ
Eメール:
URL :
タイトル:
Re: バイナリエディタ
やっぱり質問です。
バイナリで読み込んだものをそのままテキストボックスに出力したいのですが、
??ってなってしまって読み込めません。
どうしたらいいんですか?
テキストファイルじゃないものの読み込みをすると失敗するようです。

投稿時間:2004/07/11(Sun) 01:20
投稿者名:Say
Eメール:
URL :
タイトル:
Re^2: バイナリエディタ
バイナリオープンしてバイト配列に読み込んだデータを
1要素ずつHex関数で変換してTextBoxに書き出せばいいかと。

投稿時間:2004/07/12(Mon) 12:36
投稿者名:りっとっと
Eメール:
URL :
タイトル:
Re^3: バイナリエディタ
> バイナリオープンしてバイト配列に読み込んだデータを
> 1要素ずつHex関数で変換してTextBoxに書き出せばいいかと。
を作ってみました。
フォームにテキストボックスを配置し、テキストボックスの表示フォントを
等幅フォント(MSゴシックなど)にして、下のプログラムを書いて実行してみてください。
(SJISファイルのみ対応)
Private Sub Form_Load()
    Dim bin()  As Byte
    Dim binLine() As Byte
    Dim binData As Byte
    Dim cnt As Long
    Dim cnt2 As Long
    Dim binLen As Long
    Dim strData As String
    Dim strChar As String
    Dim strBinary As String
    Dim MultiFlg As Boolean
    
    Open "c:\Boot.INI" For Binary As #1
    binLen = LOF(1) - 1
    ReDim bin(binLen)
    Get #1, , bin
    Close #1
    For cnt = 0 To (binLen \ 16) + 1
        For cnt2 = 0 To 15
            If cnt * 16 + cnt2 > binLen Then Exit For
            strData = strData & " " & Right("00" & Hex(bin(cnt * 16 + cnt2)), 2)
            If cnt2 = 7 Then strData = strData & " _"
        Next
        ReDim binLine(15)
        For cnt2 = 0 To 15
            If cnt * 16 + cnt2 > binLen Then Exit For
            binData = bin(cnt * 16 + cnt2)
            Select Case binData
                '改行コードやタブの場合はスペースに変換
                Case Asc(vbCr), Asc(vbLf), Asc(vbTab)
                    binLine(cnt2) = Asc(" ")
                '文字列表示部分において一番最後のバイトが2バイト文字の先頭バイト
                'のだったら、そのままだと文字化けするので、配列を拡張して
                'きちんと2バイトにする
                Case &H80 To &H9F, &HE0 To &HEF
                    If cnt2 = 15 Then
                        MultiFlg = True
                        ReDim Preserve binLine(16)
                        binLine(15) = binData
                        binLine(16) = bin(cnt * 16 + 16)
                    Else
                        binLine(cnt2) = binData
                    End If
                Case Else
                    '前の行で一番最後のバイトが2バイト文字の先頭バイトだった場合
                    'すでにこのバイトのデータは表示しているのでスペースにする
                    If MultiFlg Then
                        binLine(cnt2) = Asc(" ")
                        MultiFlg = False
                    Else
                        binLine(cnt2) = binData
                    End If
            End Select
        Next
        strChar = StrConv(binLine, vbUnicode)
        '1行データ作成及び連結
        strBinary = strBinary & Right("0000000000" & Hex(cnt), 8) & "  " & strData & "  " & strChar & vbCrLf
        strData = ""
        strChar = ""
    Next
    Text1.Text = strBinary
    
End Sub

Private Sub Form_Resize()
    If Me.ScaleWidth <= 0 Then Exit Sub
    With Text1
        .Left = 0
        .Top = 0
        .Width = Me.ScaleWidth
        .Height = Me.ScaleHeight
    End With
End Sub

投稿時間:2004/07/15(Thu) 10:06
投稿者名:あきこ
Eメール:
URL :
タイトル:
Re^4: バイナリエディタ
返事遅れてすいませんでした。
できました!!!
ありがとうございます!!