Write hex-string to file in binary mode

主宰稳场 提交于 2019-12-13 03:52:48

问题


I want to write the hexadecimal values to a binary file in order they look the same when I open in hex editor.

My current code is this:

Sub Write2Binary()
Dim i As Integer
Dim nFileNum As Integer
Dim sFilename As String

sFilename = "D:\OutputPath\Test.bin"

strBytes = "F3 A1 02 00 04 00 8D 24 44 C3 8C 03 83 49 26 92 B5"
arrBytes = Split(strBytes)

nFileNum = FreeFile

Open sFilename For Binary Lock Read Write As #nFileNum

For i = LBound(arrBytes) To UBound(arrBytes)
    Put #nFileNum, , arrBytes(i)
Next i

Close #nFileNum

End Sub

This code produces the following binary file that when I open it in a Hex editor looks like this:

08 00 02 00 46 33 08 00 02 00 41 31 08 00 02 00 
30 32 08 00 02 00 30 30 08 00 02 00 30 34 08 00 
02 00 30 30 08 00 02 00 38 44 08 00 02 00 32 34 
08 00 02 00 34 34 08 00 02 00 43 33 08 00 02 00 
38 43 08 00 02 00 30 33 08 00 02 00 38 33 08 00 
02 00 34 39 08 00 02 00 32 36 08 00 02 00 39 32 
08 00 02 00 42 35 

That is different to the content I want to have in binary file. When I open the file in Hex editor I like to see the following content:

F3 A1 02 00 04 00 8D 24 44 C3 8C 03 83 49 26 92 B5

How can I do this?


回答1:


Your data represents Hex values of bytes to be wriiten to a binary file. Split produces an array of strings, each element being a string represention of a hex value. As Comintern told you, you need to convert them to numbers.

Put uses the type of the Varname parameter to determine the length (number of bytes) to write, so in this case you need to convert to Byte, so use CByte to convert. CByte also needs to know the values are Hex, so prepend with &H

All up, your code becomes

Sub Write2Binary()
    Dim i As Long
    Dim nFileNum As Integer
    Dim sFilename As String
    Dim strBytes As String
    Dim arrBytes As Variant

    sFilename = "D:\OutputPath\Test.bin"

    strBytes = "F3 A1 02 00 04 00 8D 24 44 C3 8C 03 83 49 26 92 B5"
    arrBytes = Split(strBytes)

    nFileNum = FreeFile

    Open sFilename For Binary Lock Read Write As #nFileNum

    For i = LBound(arrBytes) To UBound(arrBytes)
        Put #nFileNum, , CByte("&H" & arrBytes(i))
    Next i

    Close #nFileNum
End Sub


来源:https://stackoverflow.com/questions/54658840/write-hex-string-to-file-in-binary-mode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!