接上个帖子:http://community.csdn.net/Expert/topic/5542/5542328.xml?temp=.7452509重现一下,现在想把转换过来的直接放到字符数组里,也是每行14个字节排列:有一个数据文件,用uedit32打开显示如下:
AA 55 D5 00 10 24 24 24 24 24 24 24 24 10 AA 55  猆?.$$$$$$$.猆
D5 00 10 00 00 01 38 58 02 83 97 67 AA 55 D5 00  ?...8X.儣g猆?
........等等,很多,这里注意的是要整理的是每14个字节提取为一行。我先这样做:
    Dim bytA() As Byte
    Dim lngLen As Long
   
    Open "c:\Data.txt" For Binary As #1
    lngLen = LOF(1)
    ReDim bytA(lngLen - 1) As Byte
    Get #1, 1, bytA
    Close #1
读取后,全部放到 bytA 数组中,数组大小根据Data.txt字节大小自动分配。我要求帮助的是,怎样从 bytA 数组中每提取14个字节为一行,然后保存到一个数组中去,在提取的同时,要把每个字节转16进制的Ascii,即把上面在UE中显示的整理成下列这样:
AA 55 D5 00 10 24 24 24 24 24 24 24 24 10
AA 55 D5 00 10 00 00 01 38 58 02 83 97 67
AA 55 D5 00 10 00 00 01 31 12 34 56 78 28
AA 55 D5 00 10 00 02 00 00 00 00 00 00 12
AA 55 D5 00 10 00 00 00 00 00 00 00 00 10
AA 55 D5 00 10 07 05 18 13 29 58 08 86 E6
AA 55 D5 00 10 00 00 00 00 00 00 00 03 13
AA 55 D5 00 10 00 00 00 00 00 00 00 20 30
AA 55 D5 00 10 00 00 00 00 00 00 00 00 10
AA 55 D5 00 10 00 00 00 00 00 00 00 00 10这样方便程序提取,放到文本还有读出,麻烦,谢谢了。
此另开帖子,表示感谢 暴风雨 老大。

解决方案 »

  1.   

    就是转换结果存取到字符串数组中去。
    按这样排列:
    AA 55 D5 00 10 24 24 24 24 24 24 24 24 10
    AA 55 D5 00 10 00 00 01 38 58 02 83 97 67
    AA 55 D5 00 10 00 00 01 31 12 34 56 78 28
    AA 55 D5 00 10 00 02 00 00 00 00 00 00 12
    AA 55 D5 00 10 00 00 00 00 00 00 00 00 10
    AA 55 D5 00 10 07 05 18 13 29 58 08 86 E6
    AA 55 D5 00 10 00 00 00 00 00 00 00 03 13
    AA 55 D5 00 10 00 00 00 00 00 00 00 20 30
    AA 55 D5 00 10 00 00 00 00 00 00 00 00 10
    AA 55 D5 00 10 00 00 00 00 00 00 00 00 10
      

  2.   

    参考上个 jadeluo(秀峰)  的帖子:tStr = ""
        For i = 0 To lngLen
            If i <> 0 Then tStr = tStr & IIf(i Mod 14 = 0, vbCrLf, "")
            tStr = tStr & Right("0" & Hex(bytA(i)), 2)
        Next i
        Text2.Text = tStr
    Dim BytB() As String
    BytB() = Split(tStr, vbCrLf)其余的自己处理吧,呵呵
    BytB() = Split(tStr, vbCrLf)
      

  3.   

    根据ayalicer(小刀惋心) 的思路写了一个,经测试,比用字串数组快了2倍左右,ayalicer(小刀惋心) 你也可以参考一下:Private Sub Command1_Click()
        Dim bytA() As Byte, bytB() As Byte
        Dim s As String
        Dim lngLen As Long
        Dim mFile1 As String
        mFile1 = "d:\nn\DrvStudy.exe"
        lngLen = FileLen(mFile1)
        ReDim bytA(lngLen - 1)
        Dim k As Long, m As Long
        k = lngLen \ 14
        m = lngLen Mod 14
        k = k * 43 + m * 3
        ReDim bytB(k - 1)
        Open mFile1 For Binary As #1
        Get #1, , bytA
        Close #1
        
        Dim i As Long, tmps() As Byte, Intm As Long, Ints As Long
        For i = 0 To UBound(bytA)
            Intm = bytA(i) Mod 16 '低位
            If Intm >= 10 Then
                Intm = Intm + 55
             Else
                Intm = Intm + 48
             End If
            Ints = bytA(i) \ 16 '高位
            If Ints >= 10 Then
                Ints = Ints + 55
             Else
                Ints = Ints + 48
             End If
            k = i \ 14
            k = k * 43
            m = i Mod 14
            If i Mod 14 = 13 Then
                bytB(k + m * 3) = Ints
                bytB(k + m * 3 + 1) = Intm
                bytB(k + m * 3 + 2) = 13
                bytB(k + m * 3 + 3) = 10
            Else
                bytB(k + m * 3) = Ints
                bytB(k + m * 3 + 1) = Intm
                bytB(k + m * 3 + 2) = 32
            End If
        Next
        Open "d:\nn\test2.txt" For Binary As #1
        Put #1, , bytB
        Close #1
        
        Erase bytB
        Erase bytA
        MsgBox "完成"
    End Sub
      

  4.   

    谢谢 暴风雨 老大。
    再问一个问题,怎么指定开始循环读取的行,然后读几行呢?
    比如以下很多输入,我要从地 17行开始循环读取,直读取2行,这么怎么做啊?
    AA55D50010242424242424242410
    AA55D50010000001385802839767
    AA55D50010000001311234567828
    AA55D50010000200000000000012
    AA55D50010000000000000000010
    AA55D500100705230851250193DF
    AA55D50010000000000000000111
    AA55D50010000000000000000212
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D50010000000000000000010
    AA55D500100705230851250193DF
    AA55D50010000000000000000010
    AA55D500010705230851250193CE
    AA55D500010705230852360193DE
    AA55D50001FFFFFFFFFFFFFFFF01
    AA55D500800000000080FFFFFFFF