你用 Get #1,byteData 取字节text1=text1+ hex(byteData)+" "
注意文件要以二进制方式打开open "F:\A.DDD" for Binary as #1
如果文件很大的话,可以 Dim buffer() As Byte Dim filelength As Integer
Dim i As Integer Dim w As Integer, r As Integer
Open "c:\temp.txt" For Binary As #1
ReDim buffer(1 To 2000)
filelength = FileLen("c:\temp.txt") w = Int(filelength / 2000) r = filelength - w * 2000
For i = 1 To w
Get #1, , buffer '处理Byte数组,如text1.text=text1.text & hex$(buffer(... Next i
ReDim buffer(1 To r) Get #1, , buffer '处理Byte数组 Close #1 也就是先2000个字节2000个字节地读,然后处理,应该快一些
Private Sub Command2_Click() Dim mem() As Byte, tempbyte() As Byte Dim n As Long, filename As String, i As Integer Me.CommonDialog1.Filter = "所有文件 *.*|*.*" Me.CommonDialog1.ShowOpen If Me.CommonDialog1.filename = "" Then Exit Sub filename = Me.CommonDialog1.filename Open filename For Binary As 1 n = LOF(1) ReDim mem(n - 1) Get 1, , mem Close 1 Dim s As String s = "" For n = 0 To UBound(mem) s = s + String(2 - Len(Hex(mem(n))), "0") + Hex(mem(n)) + " " Next Me.RichTextBox1.Text = s End Sub 你自己优化一下。
'现在和UltraEdit-32的16进制编辑部分基本一样了,可是速度...,高手把它优化一下吧。 Option Explicit Private Sub Command1_Click() On Error Resume Next CommonDialog1.Filter = "all files *.*|*.*" CommonDialog1.ShowOpen If CommonDialog1.filename = "" Then Exit Sub Dim filename As String filename = CommonDialog1.filename Dim mfilelen As Long mfilelen = FileLen(filename) If mfilelen = 0 Then Exit Sub Dim filelinenum As Long Dim fileleftnum As Long filelinenum = mfilelen \ 16 fileleftnum = mfilelen - filelinenum * 16 Dim s As String, mybyte(1 To 16) As Byte, i As Long Dim linenumlen As Long, stemp As String, j As Long Dim sstemp As String, str As String, ss As String str = "" For i = 1 To filelinenum stemp = Hex(i - 1) linenumlen = Len(stemp) s = String(7 - linenumlen, "0") + stemp + "0" s = s + "h: " Open filename For Binary As 1 Seek 1, (i - 1) * 16 + 1 Get 1, , mybyte Close ss = "" For j = 1 To 16 sstemp = Hex(mybyte(j)) sstemp = String(2 - Len(sstemp), "0") + sstemp + " " ss = ss + sstemp Next s = s + ss s = s + vbCrLf str = str + s Next If fileleftnum = 0 Then s = "" Else Dim myleftbyte() As Byte ReDim myleftbyte(1 To fileleftnum) As Byte Dim k As Long Open filename For Binary As 1 Seek 1, filelinenum * 16 + 1 Get 1, , myleftbyte Close ss = "" For j = 1 To fileleftnum sstemp = Hex(myleftbyte(j)) sstemp = String(2 - Len(sstemp), "0") + sstemp + " " ss = ss + sstemp Next stemp = Hex(filelinenum) linenumlen = Len(stemp) s = String(7 - linenumlen, "0") + stemp + "0" s = s + "h: " s = s + ss str = str + s End If RichTextBox1.Text = str End Sub
Dim filelength As Integer
Dim i As Integer
Dim w As Integer, r As Integer
Open "c:\temp.txt" For Binary As #1
ReDim buffer(1 To 2000)
filelength = FileLen("c:\temp.txt")
w = Int(filelength / 2000)
r = filelength - w * 2000
For i = 1 To w
Get #1, , buffer
'处理Byte数组,如text1.text=text1.text & hex$(buffer(...
Next i
ReDim buffer(1 To r)
Get #1, , buffer
'处理Byte数组
Close #1
也就是先2000个字节2000个字节地读,然后处理,应该快一些
Dim mem() As Byte, tempbyte() As Byte
Dim n As Long, filename As String, i As Integer
Me.CommonDialog1.Filter = "所有文件 *.*|*.*"
Me.CommonDialog1.ShowOpen
If Me.CommonDialog1.filename = "" Then Exit Sub
filename = Me.CommonDialog1.filename
Open filename For Binary As 1
n = LOF(1)
ReDim mem(n - 1)
Get 1, , mem
Close 1
Dim s As String
s = ""
For n = 0 To UBound(mem)
s = s + String(2 - Len(Hex(mem(n))), "0") + Hex(mem(n)) + " "
Next
Me.RichTextBox1.Text = s
End Sub
你自己优化一下。
Option Explicit
Private Sub Command1_Click()
On Error Resume Next
CommonDialog1.Filter = "all files *.*|*.*"
CommonDialog1.ShowOpen
If CommonDialog1.filename = "" Then Exit Sub
Dim filename As String
filename = CommonDialog1.filename
Dim mfilelen As Long
mfilelen = FileLen(filename)
If mfilelen = 0 Then Exit Sub
Dim filelinenum As Long
Dim fileleftnum As Long
filelinenum = mfilelen \ 16
fileleftnum = mfilelen - filelinenum * 16
Dim s As String, mybyte(1 To 16) As Byte, i As Long
Dim linenumlen As Long, stemp As String, j As Long
Dim sstemp As String, str As String, ss As String
str = ""
For i = 1 To filelinenum
stemp = Hex(i - 1)
linenumlen = Len(stemp)
s = String(7 - linenumlen, "0") + stemp + "0"
s = s + "h: "
Open filename For Binary As 1
Seek 1, (i - 1) * 16 + 1
Get 1, , mybyte
Close
ss = ""
For j = 1 To 16
sstemp = Hex(mybyte(j))
sstemp = String(2 - Len(sstemp), "0") + sstemp + " "
ss = ss + sstemp
Next
s = s + ss
s = s + vbCrLf
str = str + s
Next
If fileleftnum = 0 Then
s = ""
Else
Dim myleftbyte() As Byte
ReDim myleftbyte(1 To fileleftnum) As Byte
Dim k As Long
Open filename For Binary As 1
Seek 1, filelinenum * 16 + 1
Get 1, , myleftbyte
Close
ss = ""
For j = 1 To fileleftnum
sstemp = Hex(myleftbyte(j))
sstemp = String(2 - Len(sstemp), "0") + sstemp + " "
ss = ss + sstemp
Next
stemp = Hex(filelinenum)
linenumlen = Len(stemp)
s = String(7 - linenumlen, "0") + stemp + "0"
s = s + "h: "
s = s + ss
str = str + s
End If
RichTextBox1.Text = str
End Sub