我想将数据文件(F:\A.DDD)的内容调入到Text1中来,再用Text2显示文件内容的16进制,如:文件中有ABC三个字,我要在Text2显示:41 42 43要求:文件不是文本文件,是数据文件,所以要显示某16进制码!~
3Q3Q

解决方案 »

  1.   

    你用 Get #1,byteData 取字节text1=text1+ hex(byteData)+" "
      

  2.   

    注意文件要以二进制方式打开open "F:\A.DDD" for  Binary as #1
      

  3.   

    如果文件很大的话,可以    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个字节地读,然后处理,应该快一些
      

  4.   

    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
    你自己优化一下。
      

  5.   

    '现在和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