今天要做一個性能測試,開發人員直接從日誌中截取了一大堆的十六進制報文給我,但是因爲是asc碼的,沒法直接使用,還得先轉換成16進制報文才行。
baidu一下,淨是c的,以前倒是用c++ builder寫過一個,也有c的,但是早就不知道扔到哪裏去了,而且要環境,現在深深感覺到vbs還是好用呀,文本編輯器就可以了。寫了兩個,一個是直接進行文件轉換,另一個就轉換一個字符串,用得上的同學可以留着,用不上的同學散了吧。
文件轉換的代碼:
dim strInFile,strOutFile,strLine
Dim dt1, dt2
dt1 = Now
strInFile="mes1.txt"
strOutFile=getNow() & ".dat"
strall=""
Set fs=createobject("scripting.filesystemobject")
Set f=fs.opentextfile(strInFile,1,true)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim stream, xmldom, node
Set xmldom = CreateObject("Microsoft.XMLDOM")
Set node = xmldom.CreateElement("binary")
node.DataType = "bin.hex"
Set stream = CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Open
Do Until f.AtEndOfStream
strLine=f.ReadLine
node.Text = strLine & vbcrlf
stream.write node.NodeTypedValue
Loop
f.close
Set f=nothing
Set fs=nothing
stream.saveToFile strOutFile, adSaveCreateOverWrite
stream.Close
Set stream = Nothing
Set node = Nothing
Set xmldom = Nothing
dt2 = Now
MsgBox "執行完成,總共用時:" & DateDiff("s", dt1, dt2) & "秒"
Function getNow()
Dim d
Dim sRet
d=Now()
sRet=Year(d) & Right("00" & Month(d),2) & Right("00" & Day(d),2) & Right("00" & Hour(d),2) & Right("00" & Minute(d),2) & Right("00" & Second(d),2)
getNow=sRet
End Function
單行轉換的代碼:
'寫二進制文件
Call WriteBinary("001.dat","2A485132303031383932333737333639362C41443126413131343635333232333338333433313134303733333634363030313932313031313426423032303030303030303026433030313A35353E3826463030303023")
MsgBox "done"
Sub WriteBinary(FileName, Buf)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim stream, xmldom, node
Set xmldom = CreateObject("Microsoft.XMLDOM")
Set node = xmldom.CreateElement("binary")
node.DataType = "bin.hex"
node.Text=Buf
Set stream = CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Open
stream.write node.NodeTypedValue
stream.saveToFile FileName, adSaveCreateOverWrite
stream.Close
Set stream = Nothing
Set node = Nothing
Set xmldom = Nothing
End Sub