VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -