5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
|
1 | |
Нужно заменить значения в 16-ричном коде26.01.2015, 00:04. Показов 3959. Ответов 53
Метки нет (Все метки)
Передо мной стоит задача, мне надо в определённом файле, при нажатии на кнопку заменить несколько байтов, как это сделать я не имею не малейшего понятия, много лазил в интернете, нечего не нашёл. Я вообще не как не могу понять как работать с байтами. Помогите я уже устал искать.
0
|
26.01.2015, 00:04 | |
Ответы с готовыми решениями:
53
Замена символов в 16-ричном HEX коде программы Нужно чтобы на экран числа выводились в 16-ричном формате В 16-ричном числе выделить маской старший разряд и заменить его предопределенным числом Вывести в консоль в виде таблицы значения чисел в 16 и 10-ричном формате |
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
26.01.2015, 02:11 | 2 |
0
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
|
26.01.2015, 18:15 [ТС] | 3 |
ММ а по другому не как? Я просто знаю,в принципе как загрузить например в мемо весь шестнадцатеричный код(но связи с размером файла этот код не вводится, сильно лагает). Мне бы для начала хотя бы это сделать"Загрузить определённый отрезок байтов в например мемо" А от этого я уже смог бы отталкиваться. Помогите пожалуйста не пишите чепуху, я весь интернет облазил ничего не нашёл, вы моя последняя надежда(.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
26.01.2015, 19:54 | 4 |
Ну так продемонстрируй в коде свои "простовпринципезнания"..
Допустим файл небольшой..
0
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
||||||
26.01.2015, 22:03 [ТС] | 6 | |||||
Добавлено через 47 секунд В этом и суть "Как!"
0
|
26.01.2015, 23:12 | 8 | |||||
например можно вот так вот это сделать, я про замену байтов на определенной позиции
1
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
27.01.2015, 00:17 | 9 | ||||||||||
В продолжение темы. Ещё 2 примера.
Предположим, в файл со смещением 9 надо записать 5 смежных байт. Смещение означает - сколько байт расположено слева от нужной позиции. Поэтому смещение 0 соответствует первому байту файла. А смещение 9 соответствует позиции, на которой расположен 10-й байт. Для перехода к заданному смещению в файле предназначена процедура Seek(). Если используется файловый поток типа TFileStream, то к заданному смещению можно перейти, записав нужное значение в свойство TFileStream.Position. Действовать будем так: 1. Создадим массив из 5 байт. 2. Запишем в него нужные значения байтов. 3. Откроем файл и переведём файловый указатель на позицию, соответствующую смещению 9 (это 10-й байт, считая от начала файла). 4. Запишем в файл, начиная с текущей позиции, содержимое массива - т. е. 5 заданных байт. С использованием процедуры BlockWrite():
Содержимое файла показано так, как оно выглядит в текстовом редакторе с ANSI кодировкой. Например, ANSI кодовая страница CP1251 (Windows-1251). Первая половина этой таблицы совпадает с таблицей ASCII - там заданы десятичные цифры, буквы латиницы и пр.
2
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
|
27.01.2015, 01:30 [ТС] | 10 |
Огромное всем спасибо, хоть что-то начал понимать, но вопрос не закрыт, по возникновении вопросов буду писать сюда)
Добавлено через 36 минут А как отправить поиск по файлу(16-ричном коде) например мне надо найти вот такую комбинацию 5c 33 64 ab 31 de 0b 26 2d 9a 12 8b 3b 3e 55 3e и уже в этой комбинации менять байты как это сделать? А за ответы спасибо очень вам благодарен!
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
27.01.2015, 01:57 | 11 |
Вот так и знал, что проблема именно в том как найти те байты, которые нужно заменить.
Ищи в И-нете реализацию Boyer-Moore-Horspool алгоритма. P.S. Возможно с тех пор когда мне нужен был такой поиск придумали другой более быстрый алгоритм.
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
27.01.2015, 15:38 | 12 | |||||
Сообщение было отмечено Kaylan как решение
Решение
Скорее всего, автора устроит простой алгоритм поиска. По крайней мере, до сих пор не были обозначены какие-то особенные требования к скорости обработки. Поэтому вполне можно воспользоваться функцией Pos() или PosEx().
Можно поступить так - загружаем содержимое файла в ANSI строку. И в этой строке выполняем поиск подстроки с помощью функции Pos() или PosEx(). Подстрокой будет другая ANSI строка, которая содержит искомую последовательность байтов. Полученную позицию используем для записи новых данных в файл. Если размер файла очень большой, то можно организовать его обработку по частям. И можно организовать замену всех вхождений заданного шаблона, если нужно. Пример для случая, когда весь файл можно загрузить в память и когда нужно заменить только первое вхождение.
1
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
||||||
27.01.2015, 21:27 [ТС] | 14 | |||||
Согласен!!! Огромное ему спасибо он мне реально помог очень.
Добавлено через 10 минут И последнее я конечно видел как делать, но не очень понял помогите мне нужно, что бы указывать не определённый файл вот здесь
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
28.01.2015, 05:23 | 15 |
Возможно, мы зря тут с байтами возимся. Если надо работать с INI файлами - для этого есть специальные классы: TIniFile и TMemIniFile из модуля IniFiles. Чтобы перебрать все файлы по заданной маске имён - для этого можно использовать функции FindFirst()/FindNext()/FindClose(). Пример: Поиск текстовых файлов, которые содержат заданное слово. Найденные файлы переместить в другую папку. В этом примере перебор файлов идёт в заданной папке и во всех вложенных в неё папках.
0
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
|
28.01.2015, 14:43 [ТС] | 16 |
Нет, не ини я как пример привёл. Там другое расширение.
Именно что бы расширение было (не то что внутри файла) у меня есть определённое расширение, в определённой папке лежат около сотни файлов с таким расширением, и в них во всех есть одна последовательность байтов но имеют разное смещение, мне нужно преобразовать эти байты именно во ВСЕХ файлах в папке.
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
29.01.2015, 11:28 | 17 | |||||
Поиск и замена цепочек байт в файлах заданного директория. С обработкой ошибок. Поиск файлов построен на вызовах FindFirst()/FindNext()/FindClose(). Если параметр aSubDir = True, то поиск файлов выполняется также во вложенных директориях. В каждом файле выполняется поиск и замена всех вхождений заданной цепочки - используется функция PosEx() из модуля SysUtils.
Следует учитывать следующее. В файловой системе каждому имени файла сопоставляется короткое имя. А функции FindFirst()/FindNext() выполняют поиск по обеим версиям имён (по длинному и короткому). В результате этого может произойти, например, следующая ситуация. Если задали такую маску поиска: *.exe, то будут найдены файлы со следующими расширениями: *.exe, *.exec, *.executable. Это происходит потому, что файлам с расширениями *.exec, *.executable соответствуют короткие имена, в которых расширение оказывается равным *.exe. Такая особенность относится также к ряду других расширений. Поэтому, если надо точно учитывать расширения, то надо в код добавить дополнительную проверку расширений.
0
|
29.01.2015, 12:09 | 18 |
Не по теме: Да и не только вам :), благодаря этому человеку я вообще программирую, вытащил он меня в свое время из того, во что я увяз. Не по теме: ну, мы же ничего о нем не знаем ), вдруг он это уже делает на самом деле, а тут под прикрытием своего ника только :)))
0
|
Mawrat
|
29.01.2015, 12:41
#19
|
0
|
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
|
|
29.01.2015, 22:30 [ТС] | 20 |
Спасибо всем огромное в большей степени Mawrat-у за подробное объяснение и за коды, без него я так бы и ходил в просторах интернета так и нечего не узнав, я очень рад что написал СЮДА этот вопрос.
Добавлено через 5 часов 34 минуты А можно ли как нибудь все найденные файлы загрузить так что бы это вообще не было видно например в стринглист или куда ещё. PS вот это мне не обязательно, такая проблема у меня не возникнет. Извините если туплю но не как не могу сообразить.
0
|
29.01.2015, 22:30 | |
29.01.2015, 22:30 | |
Помогаю со студенческими работами здесь
20
Нужно заменить тернарный оператор на циклы в готовом коде Значения в матрице. Нужно разобраться в коде с++ человеку не знающему языка Что нужно поменять в коде чтобы значения в матрице были вещественные? Нужно чтобы программа открывала Developer Tool и меняла некоторый значения в коде страницы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |