Private Sub cmdConvert_Click()
Dim strBinFileName As String
'防止代碼重入
cmdConvert.Enabled = False
'判斷檔案路徑是否有效
Do
If Dir(Trim(txtHexFileName.Text)) = "" Or Trim(txtHexFileName.Text) = "" Then
'用戶沒有選擇檔案,模擬用戶單擊了TextBox產生事件
txtHexFileName_Click
Else
Exit Do
End If
Loop
strBinFileName = Trim(txtHexFileName.Text)
strBinFileName = Left(strBinFileName, Len(strBinFileName) - 4) '去掉擴展名
strBinFileName = strBinFileName + ".bin"
If Hex_To_Bin_Convert(txtHexFileName.Text, strBinFileName, ProgressBar1) = False Then
'操作失敗
MsgBox "格式轉化失敗!", vbCritical, "錯誤"
Else
'操作成功
MsgBox "格式轉化成功!" + Chr(13) + Chr(10) + strBinFileName + " ", vbInformation, "提示"
End If
'開啟按鈕功能
cmdConvert.Enabled = True
End Sub
Private Sub Form_Load()
With ProgressBar1
.Top = frmMain.txtHexFileName.Top + 20
.Left = frmMain.txtHexFileName.Left + 20
.Height = frmMain.txtHexFileName.Height - 30
.Width = frmMain.txtHexFileName.Width - 30
.Visible = False
End With
End Sub
Private Sub txtHexFileName_Click()
On Error GoTo Err_Handle:
CommonDlg.DialogTitle = "Open File"
CommonDlg.Flags = cdlOFNCreatePrompt Or cdlOFNReadOnly
CommonDlg.CancelError = True
CommonDlg.Filter = "Intel Hex File(*.HEX)|*.HEX"
CommonDlg.ShowOpen
txtHexFileName.Text = CommonDlg.FileName
Exit Sub
Err_Handle:
Err.Clear
End Sub
Public Function Hex_To_Bin_Convert _
( _
strHEXFileName As String, _
strBinFileName As String, _
Progress As ProgressBar _
) As Boolean
Dim StringLine As String
Dim StringLine1 As String
Dim dwFileLength As Long
Dim Start_address() As Long
Dim Length() As Long
Dim dwSize As Long
Dim RecordType As Integer
Dim wAddress As Long
Dim wWriteAddress As Long
Dim Address() As String
Dim n As Long
Dim i As Long '臨時變數
Dim Hexfile_RowCount As Long 'Hex檔案的行數
Dim chData As Byte
Dim ParaStr() As String '讀取引數陣列
Dim ParaStr1() As String '讀取引數陣列
Dim Data_FF As String '讀取引數陣列
Dim Data() As String '讀取引數陣列
Hex_To_Bin_Convert = False
chData = &HFF
strBinFileName = Trim(strBinFileName)
With Progress
.Enabled = True
.Value = 0
.Visible = True
Data_FF = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
'打開源檔案Hex
Open strHEXFileName For Input As #1
'獲取HEX檔案的長度
dwFileLength = FileLen(strHEXFileName)
'從HEX檔案中讀取一條記錄
Line Input #1, StringLine
' Hexfile_RowCount = UBound(Split(StringLine, vbCr))
' Hexfile_RowCount = UBound(Split(StringLine, vbCrlf))
Hexfile_RowCount = UBound(Split(StringLine, vbLf))
StringLine1 = Right(StringLine, dwFileLength - 1)
'--------------------資料處理---------------------'
ParaStr = Split(StringLine1, ":")
For i = 0 To (Hexfile_RowCount-3)
Length(i) = HEX_to_DEC(Mid(ParaStr(i), 1, 2))
' Start_address(i) = HEX_to_DEC("&H" & Mid(ParaStr(i), 7, 2))
' Address(i) = Mid(ParaStr(i), 3, 4)
Next
For i = 0 To (Hexfile_RowCount - 3)
If Start_address(i) = 0 Then
If Length(i) * 2 = 32 Then
'起始地址 00 長度16 資料78340034C2340034B834023478340034
Data(i) = Mid(ParaStr(i), 9, Length(i) * 2)
'起始地址 00 長度4 補12個FF
'0C 94 CD 01 FF FF FF FF FF FF FF FF FF FF FF FF 后補12個FF
Else
' Data(i) = Mid(ParaStr(i), 9, Length(i) * 2) & Mid(Data_FF, Length(i) * 2 + 1, (16 - Length(i)) * 2)
End If
Else
'起始地址不是00 長度4
'FF FF FF FF FF FF FF FF FF FF FF FF 0C 94 3E 05 前補12個FF
' Data(i) = Mid(Data_FF, Length(i) * 2 + 1, (16 - Length(i)) * 2) & Mid(ParaStr(i), 9, Length(i) * 2)
End If
Next
Close #1
.Enabled = False
.Visible = False
End With
End Function
Public Function HEX_to_DEC(ByVal Hex As String)
Dim i As Long
Dim B As Long
Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, Len(Hex) - i + 1, 1)
Case "0":
B = B + 16 ^ (i - 1) * 0
Case "1":
B = B + 16 ^ (i - 1) * 1
Case "2":
B = B + 16 ^ (i - 1) * 2
Case "3":
B = B + 16 ^ (i - 1) * 3
Case "4":
B = B + 16 ^ (i - 1) * 4
Case "5":
B = B + 16 ^ (i - 1) * 5
Case "6":
B = B + 16 ^ (i - 1) * 6
Case "7":
B = B + 16 ^ (i - 1) * 7
Case "8":
B = B + 16 ^ (i - 1) * 8
Case "9":
B = B + 16 ^ (i - 1) * 9
Case "A":
B = B + 16 ^ (i - 1) * 10
Case "B":
B = B + 16 ^ (i - 1) * 11
Case "C":
B = B + 16 ^ (i - 1) * 12
Case "D":
B = B + 16 ^ (i - 1) * 13
Case "E":
B = B + 16 ^ (i - 1) * 14
Case "F":
B = B + 16 ^ (i - 1) * 15
End Select
Next i
HEX_to_DEC = B
End Function
執行到這里報越界-----“ Length(i) = HEX_to_DEC(Mid(ParaStr(i), 1, 2))”------》求大師指點
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/20017.html
標籤:VB基礎類
上一篇:用VB將excel中的一列資料生成一個陣列,放到指定的單元格
下一篇:大學生
