Что нового

Редактирование файла в HEX режиме.

MEXAH

What if?
Сообщения
28
Репутация
1
Есть такой файл (в архиве), там если в HEX его открыть, можно найти такие строки: 111111 222222 333333 444444 555555.
Как их можно заменить в hex режиме, при этом сохранив структуру файла в целости? На эти: forest земляника https://null 123-земля !№;%::?*@%&.
В файле данные об объектах и тексте из документа для графического редактора. Пытаюсь найти способ поменять текст не используя собственно редактор. Почему HEX - потому что иначе не выходит редактировать кирилические символы, там бесконечные кодировки ascii, с которыми непойми вообще как работать. А в ручную через Notepad++ и плагин HEX -удалось заменить нужный текст на русские буквы.
 

Вложения

  • page1.rar
    3.8 КБ · Просмотры: 6
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Код:
#include <String.au3>

$File = @ScriptDir & "\page1.dat"
$FO = FileOpen($File, 16)
$FR = StringReplace(FileRead($FO),StringTrimLeft(StringToBinary("222222"),2),StringTrimLeft(StringToBinary("земляника"),2), 0)
$FO = FileOpen($File, 18)
FileWrite($FO, $FR)
FileClose($FO)


Точно сказать не могу будет ли нормально работать, но как вариант для пробы
 
Последнее редактирование:
Автор
MEXAH

MEXAH

What if?
Сообщения
28
Репутация
1
Не выходит. Ваш скрипт вносит данные непосредственно кирилицей, а нужно в кодировке.
В таком виде файл откроется:
b0191e2189cc4a8feb4c245e2955a747[1].png
В таком выдаст ошибку:
Screenshot_1.png
Таким образом получается заменить только цифры, и английские символы, и то если их слитно писать, с пробелом уже выдаст ошибку.
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Код:
#include <String.au3>

$File = @ScriptDir & "\page1.dat"
$FO = FileOpen($File, 16)
$FR = StringReplace(FileRead($FO),hex(StringToBinary("222222")),_StringToHex16("земляника"), 0)
$FO = FileOpen($File, 18)
FileWrite($FO, $FR)
FileClose($FO)

Func _StringToHex16($strChar)
    Local $i,$hSt,$hStr
    For $i=1 To StringLen($strChar)
        $hSt=Hex(Asc(StringMid($strChar,$i,1)),2) & "00" ;если нужно чтоб обязательно пробельный был 04, то измените тут
        $hStr=$hStr & $hSt
    Next
    Return $hStr
EndFunc
 
Последнее редактирование:
Автор
MEXAH

MEXAH

What if?
Сообщения
28
Репутация
1
Все также получается в кирилице, только теперь изменения пошли во всем файле.
Screenshot_1.png
Слева слово "земляника" написаное через графич. редактор, справа оно-же написанное скриптом с заменой "222222"
 

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Тогда встречный вопрос, вы в самом посте пишите, что вручную вам удалось заменить через блокнот(notepad+), то собственно какую кодировку вы использовали для изменения (ибо я опирался на примеры, что в самом файле)

А так же судя по скринам, после изменения через граф редактор (офф) меняется и последующая структура, что уже может говорить о том, что редакция через hex плохая затея
 
Автор
MEXAH

MEXAH

What if?
Сообщения
28
Репутация
1
Тогда встречный вопрос, вы в самом посте пишите, что вручную вам удалось заменить через блокнот(notepad+), то собственно какую кодировку вы использовали для изменения (ибо я опирался на примеры, что в самом файле)

А так же судя по скринам, после изменения через граф редактор (офф) меняется и последующая структура, что уже может говорить о том, что редакция через hex плохая затея
Я менял значения прямо в этих двоичных структурах на 04 35 04 3c 04 3b и т.п. а потом просто сохранял файл как был, и работало.
Ну почему плохая затея, в позапрошлом примере ведь получилось сохранить весь файл как был, менялся только нужный текст, осталось только изменить кодировку измененного.
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Я менял значения прямо в этих двоичных структурах на 04 35 04 3c 04 3b и т.п. а потом просто сохранял файл как был, и работало.
Ну почему плохая затея, в позапрошлом примере ведь получилось сохранить весь файл как был, менялся только нужный текст, осталось только изменить кодировку измененного.
тогда откуда пошло "04 35 04 3c 04 3b"? Меня конкретно в плане кодировки это и интересует, просто так же вы это взять ни откуда же не могли
 
Автор
MEXAH

MEXAH

What if?
Сообщения
28
Репутация
1
тогда откуда пошло "04 35 04 3c 04 3b"? Меня конкретно в плане кодировки это и интересует, просто так же вы это взять ни откуда же не могли
А я в графическом редакторе написал текст на русском, потом посмотрел в HEX редакторе как это выглядит и просто поменял на такие-же в файле с "111111"
 
Верх