如何在Excel/VBA中使用十六进制代码创建文件

如何在Excel/VBA中使用十六进制代码创建文件,excel,vba,binary,hex,decimal,Excel,Vba,Binary,Hex,Decimal,我在excel工作簿中有十六进制格式的代码。每个2位数的代码都在一个单独的单元格中,因此看起来像4D | 54 | 68 | 64 | 00 | 00 | 00 | 06等。如果简化了,也可能有一些单元格有4或6位数的代码。有没有办法从这里编码一个文件?实际上,我需要它,以便在十六进制编辑器中打开文件将显示代码。我有一种感觉,这可能涉及到HEX2DEC或HEX2BIN,但即使这样,我也不知道该从哪里着手。您实际上没有说您做了什么,但文本文件函数进行字符转换。在二进制模式下使用流对象写入磁盘。使用

我在excel工作簿中有十六进制格式的代码。每个2位数的代码都在一个单独的单元格中,因此看起来像4D | 54 | 68 | 64 | 00 | 00 | 00 | 06等。如果简化了,也可能有一些单元格有4或6位数的代码。有没有办法从这里编码一个文件?实际上,我需要它,以便在十六进制编辑器中打开文件将显示代码。我有一种感觉,这可能涉及到HEX2DEC或HEX2BIN,但即使这样,我也不知道该从哪里着手。

您实际上没有说您做了什么,但文本文件函数进行字符转换。在二进制模式下使用流对象写入磁盘。使用write方法将字节数组放入其中。和textfile函数一样,避免使用VBA的字符或字符串函数

Sub test()
     Dim ByteArray(4) As Byte

     ByteArray(0) = CByte(55)
     ByteArray(1) = CByte(55)
     ByteArray(2) = CByte(55)
     ByteArray(3) = CByte(55)

     Set BS = CreateObject("ADODB.Stream")
     BS.Type = 1
     BS.Open
     BS.Write ByteArray
     BS.SaveToFile "c:\users\test", 2

End Sub

就将字符串转换为字节而言,这可能不是最有效的解决方案,但只需以二进制模式打开文件并将字节放入其中即可:

Sub HexStringToBinaryFile()

    Dim hex_val As String
    hex_val = "4D|54|68|64|00|00|00|06"

    Dim output() As String
    output = Split(hex_val, "|")

    Dim handle As Long
    handle = FreeFile
    Open "C:\Dev\test.bin" For Binary As #handle

    Dim i As Long
    For i = LBound(output) To UBound(output)
        Put #handle, , CByte("&H" & output(i))
    Next i

    Close #handle

End Sub

excel工作簿的文件格式是什么?您使用的是哪种十六进制编辑器?到目前为止,您尝试了什么?.xlsx是默认值,但它是.xls或.xlsm没有问题。使用HxD检查十六进制代码。我试着将十六进制转换为ASCII和ANSI,并将其写入.txt,但转换回来的结果并没有留下原始十六进制值。它成功了!这正是我想要的。可能是愚蠢的后续问题:有没有办法用另一个文件名保存为.bin文件?@JamesKissmer-当然。您可以根据需要为输出文件命名。