2015-04-30 3 views
1

У меня есть код в шестнадцатеричном формате в книге excel. Каждый двузначный код кода находится в отдельной ячейке, поэтому он выглядит как 4D | 54 | 68 | 64 | 00 | 00 | 00 | 06 и т. Д. Также может быть несколько ячеек с 4 или 6-значными частями, если это делает его более простым. Есть ли способ закодировать файл здесь? Эффективно мне это нужно, так что открытие файла в шестнадцатеричном редакторе покажет код. У меня такое чувство, что это может быть связано с HEX2DEC или HEX2BIN, но даже тогда я не знаю, куда идти оттуда.Как создать файл из шестнадцатеричного кода в Excel/VBA

+0

Какой файл ваша книга Excel? Какой редактор hex вы используете? что ты уже испробовал? –

+0

.xlsx по умолчанию, но у него нет проблем быть .xls или .xlsm. Использование HxD для проверки шестнадцатеричного кода. Я пробовал преобразовать hex в ASCII и ANSI и записать это в .txt, но возврат назад не оставляет меня с исходными шестнадцатеричными значениями. –

ответ

0

Вы фактически не сказали, что сделали, но функции текстового файла преобразуют символы. Используйте объект потока в двоичном режиме для записи на диск. Используйте метод write, чтобы поместить в него массив байтов. И подобно функциям текстового файла, избегайте символьных или строковых функций 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 
2

не может быть наиболее эффективным решением с точки зрения преобразования строки в байтах, а просто открыть файл в двоичном режиме и ввод байта в нем работает просто отлично:

формат
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 
+0

IT WORKED IT WORKED! Это именно то, что я искал. Возможно, глупый вопрос: есть ли способ сохранить файл .bin с другим именем? –

+0

@JamesKissmer - Конечно. Вы можете назвать выходной файл так, как хотите. – Comintern

Смежные вопросы