Что нового

[преобразование] Преобразование строк в hex

dimid

Новичок
Сообщения
20
Репутация
0
Доброго дня!

Загвоздка в следующем:

Имеется строка (например): "4D5A0000000". Хочу записать в файл ее как бинарные данные.

Алгоритм: преобразовать строку в бинарный вид как-то -> Открыть файл на бинарную запись -> Записать

Как? StringToBinary не выходит... Т.е имеется строка, которую если считать бинарными данными и записать в файл будет текстом. Например, вышеприведенный набор "байт" это MZ.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
FileWrite(@ScriptDir & '\Test.bin', Binary('0x' & '4D5A00000000'))
 
Автор
D

dimid

Новичок
Сообщения
20
Репутация
0
Спасибо за помощь :smile:

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
dimid
странное утверждение. а где взять этот дополнительный символ? ответ кроется в другом. каждый байт можно представить в виде двухзначной шестнадцатеричной цифры, от 00-FF. Так как каждому биту в байте соответствует два положения. Поэтому суммарно есть 2^8 положений. если у тебя действительно байты, то естественно у тебя четное количество символов. по определению. другое дело, если ты тупо поставил символы от 0-19 и А-F. не обязательно, что это является байтом.
 
Автор
D

dimid

Новичок
Сообщения
20
Репутация
0
Да, с байтами именно так, но в моей программе не всегда все может пойти гладко и можно недосчитаться "половины байта" - вот я недосчитался и пришел на форум. Когда мне все-таки сказали снова про эту функцию, то я уже понял, что где-то бага в программе. Стал искать. Нашел недостачу символов в некоторых ситуациях :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
dimid
мне слабо верится. что за программа? AutoIt не умеет читать/писать/передавать часть байта.
 
Автор
D

dimid

Новичок
Сообщения
20
Репутация
0
В общих чертах: делал реверс формата данных файлов одной популярной программы. Некоторые байты там значили длину строки, некоторые порядок, некоторые были разделителем и т.д. Временами попадались заголовки нефиксированной длины. Потому на автоите написал парсер этой всей системы (выдиралку и обработку данных в обычный текстовый формат). И в одном месте не учел при обработке байт как строк, что может получится так, что отрежется "пол байта". После чего в некоторых местах начали возвращаться цифры тупо (ведь Binary не может обработать неверный формат). ... потому подумал, что может другую функцию надо какую юзать, но тут мне сказали, что Binary... начал искать причину и нашел :smile: Вот такая коротенькая, но для меня поучительная история...
 
Верх