投稿時間: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
|