Текущий архив: 2007.08.26;
Скачать: CL | DM;
ВнизXor части файла Найти похожие ветки
← →
KLAUS_ (2007-08-05 20:15) [0]Всем привет!
Возникла проблемка на могу заксорить нужную часть файла, делаю так:
fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
fs.Seek($00000000,soFromBeginning);
str:=inttostr(fs.Read(b,sizeof(b)));
for i:=1 to length(str) do
str[i]:=Chr(Ord(str[i]) xor 1);
fs.Seek($000000000,soFromBeginning);
fs.Write(str,sizeof(str));
fs.Free;
Файл считывается и даже значения меняются но как-то криво, и обратно не возвращается, подскажите где ошибка???
b:=byte;
← →
Anatoly Podgoretsky © (2007-08-05 20:25) [1]Наверно str типа string
← →
KLAUS_ (2007-08-05 20:37) [2]Точно!!
И??
← →
{RASkov} © (2007-08-05 20:45) [3]> [2] KLAUS_ (05.08.07 20:37)
> Точно!!
> И??
Что должно в итоге получиться из [0] - я не понял...
Но вот так
> fs.Write(str,sizeof(str));
с учетом [1] - это ошибка.
Хотя у тебя длинна Str не будет больше 3, а SizeOf(String) = 4 то.....
В общем объясни, что в итоге хочешь?
← →
KLAUS_ (2007-08-05 20:51) [4]Для начало, чтоб в файле изменились данные при
str[i]:=Chr(Ord(str[i]) xor 1);
Чтоб "KLAUS" стал "JM@TR" , ну это на примере, а так, беру чать кода по нужному адресу, ксору его, данные меняются, ксорю ещё раз данные возвращаются...
ЧТО НЕ ПРАВИЛЬНО ДЕЛАЮ!!
← →
{RASkov} © (2007-08-05 20:56) [5]В общем:
fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
fs.Seek($00000000,soFromBeginning); <- Зачем? Оно и так в начале...
str:=inttostr(fs.Read(b,sizeof(b))); <- Вообще не понятен смысл этого.... в Str в виде строки сколько было считано байтов ?
Потом все символы в строке str "кодируем"
for i:=1 to length(str) do
str[i]:=Chr(Ord(str[i]) xor 1);
и сместившись на начало файла
fs.Seek($000000000,soFromBeginning);
пытаемся затереть все, что было и
fs.Write(str,sizeof(str));
записать 4 байта непонятной инфы...
Правильно ли я понял ?
← →
{RASkov} © (2007-08-05 20:58) [6]> [4] KLAUS_ (05.08.07 20:51)
Не заметил...[4].
Так тебе некие строки в файле нужно ксорить, но не весь файл..... или весь?
← →
turbouser © (2007-08-05 21:00) [7]
> KLAUS_ (05.08.07 20:51) [4]
Посмотрел бы ты в хелпе - что такое sizeof и пример использования TFileStream
← →
KLAUS_ (2007-08-05 21:01) [8]Хм, планировалось так, от начала файла до нужного места:
str:=inttostr(fs.Read(b,sizeof(b))); - как мне казалось считываю файлы, а затем их ксорю!!
Косячу да??
← →
KLAUS_ (2007-08-05 21:04) [9]turbouser
Да как бы работал раньше, но дело не в этом ты по поводы вопросы говори, если есть что!
← →
{RASkov} © (2007-08-05 21:06) [10]> [8] KLAUS_ (05.08.07 21:01)
Вообще ничего не понял :(
> str:=inttostr(fs.Read(b,sizeof(b))); - как мне казалось считываю файлы
???? Может байты?
> Косячу да??
Походу...:)
[7] - почитай.
> [9] KLAUS_ (05.08.07 21:04)
Еще раз [7] почитай внимательно ) Или разъясняйся толковей...
← →
{RASkov} © (2007-08-05 21:08) [11]> [8] KLAUS_ (05.08.07 21:01)
> Хм, планировалось так, от начала файла до нужного места:
А как "нужное место" определяешь?
← →
KLAUS_ (2007-08-05 21:10) [12]{RASkov} Да байты байты, опечатался!
Хм, кажись и так уж всё расписал:
Нужно в нужном месте считать быйты и сксорить их.......
Покажите где я ошибся или подскажите что изменить, но только давайте не будем ПОЧИТАЙ и т.п.
Давайте подскажем где и как!!
← →
{RASkov} © (2007-08-05 21:12) [13]> [12] KLAUS_ (05.08.07 21:10)
Ответь на [11]
← →
KLAUS_ (2007-08-05 21:12) [14]
fs.Seek($000000000,soFromBeginning);
могу указать так <codefs.Seek($000000010,soFromBeginning);
т.е. смысл ясен думаю
← →
turbouser © (2007-08-05 21:13) [15]
> KLAUS_ (05.08.07 21:10) [12]
Эхх.
str:=inttostr(fs.Read(b,sizeof(b)));
Ты читаешь 1 байт (символ), при этом в str что оказывается? Правильно - кол-во
причитанных байт. Т.е. 1.
fs.Write(str,sizeof(str));
И что тут должно записАться в файл? Правильно - 4 байта непонятно чего.
Все-таки последуй совету из [7]
← →
Anatoly Podgoretsky © (2007-08-05 21:19) [16]Нужно обращение к буферу, а не использование переменной в качестве буфера. Можно через приведение к PChar
← →
{RASkov} © (2007-08-05 21:21) [17]> [14] KLAUS_ (05.08.07 21:12)
> т.е. смысл ясен думаю
Нет :(
Откуда у тебя значение смещения? Или оно постоянное для файлов?fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
for i:=1 to 5 do begin //Это и был вопрос про смещение, так как ты не ответал, то пусть будет 5 байт
fs.Read(b,sizeof(b));
b:=b xor 1;
fs.Seek(fs.Position-1);
fs.Write(b, SizeOf(b);
end;
fs.Free;
Так что ли? b: byte;
← →
KLAUS_ (2007-08-05 21:23) [18]turbouser Полностью согласен!!
Но вот как, пока не могу понять, поэтому и обратился!!
Anatoly Podgoretsky
Что именно, данные которые записываю, или место в файле куда хочу записать??
← →
{RASkov} © (2007-08-05 21:29) [19]> [18] KLAUS_ (05.08.07 21:23)
> Но вот как
ЧТО Как???
Строки писать нужно, например, так:
fs.write(Str[0], Length(Str));
а не указатель на строку в виде 4 байт, как это делаешь ты....
← →
KLAUS_ (2007-08-05 21:32) [20]{RASkov}
Не понял, считываю данные в файле, пускай они будут по адресу $000000010
, получаю (допустим) FF, перевожу в INT , получаю 255, перевожу в STR, теперь ксорю со смещением 1, получаю 344, перевожу в HEx, получаю 158 - вот я их и хочу записать!!
← →
Anatoly Podgoretsky © (2007-08-05 21:33) [21]> KLAUS_ (05.08.2007 21:23:18) [18]
Про данные речь, тебе еще везет, а может наоборот, что AV не получаешь.
← →
Anatoly Podgoretsky © (2007-08-05 21:34) [22]> {RASkov} (05.08.2007 21:29:19) [19]
Это даже не откомпилируется.
← →
KLAUS_ (2007-08-05 21:35) [23]Вот вот!!Согласен...
Что за AV??
← →
{RASkov} © (2007-08-05 21:36) [24]> [20] KLAUS_ (05.08.07 21:32)
> считываю данные в файле, пускай они будут по адресу $000000010
А длина этих данных какая??? откуда ты ее берешь?
И нафика столько всяких "переводов" туда-сюда??? Ты уже на этапе исходного кода пытаешься все "зашифровать"? :)
← →
MetalFan © (2007-08-05 21:38) [25]
> fs.write(Str[0], Length(Str));
ай опять за старую песню? Str[1], и если уж на то пошло, то лучше не использовать идентификатор Str!
← →
KLAUS_ (2007-08-05 21:39) [26]{RASkov}Длина этих данных по этому адресу будет явно БАЙТ!!
← →
{RASkov} © (2007-08-05 21:41) [27]> [22] Anatoly Podgoretsky © (05.08.07 21:34)
Ага... та самая таблица, т.е. индексы
вместо Str[0] нужно Str[1])
← →
{RASkov} © (2007-08-05 21:41) [28]> [26] KLAUS_ (05.08.07 21:39)
Дык тебе один байт нужно сксорить????
← →
Anatoly Podgoretsky © (2007-08-05 21:42) [29]KLAUS_ (05.08.07 21:39) [26]
Минимум три
← →
KLAUS_ (2007-08-05 21:43) [30]Тогда изменится только первый байт, и то, только в одну сторону.обратно не переводится.........и при смещении 1, получается вообще другое значение!
← →
Anatoly Podgoretsky © (2007-08-05 21:44) [31]При этом читаем один байт, пишем в строку три, а в файл записываем четыре, при том не их, а черт знает что.
← →
KLAUS_ (2007-08-05 21:44) [32]Да мне вообще придётся пол файла ксорить......мне бы на примере хотя бб, чтоб один получилось, по нужному адресу!!
← →
KLAUS_ (2007-08-05 21:45) [33]Anatoly Podgoretsky ТОЧНО!!
Подскажи как исправить??
← →
Anatoly Podgoretsky © (2007-08-05 21:47) [34]> KLAUS_ (05.08.2007 21:45:33) [33]
В ветке есть вся необходимая информация, что бы правильно написать.
Иначе стоит задуматься.
← →
KLAUS_ (2007-08-05 21:50) [35]Шикарный ответ!
← →
{RASkov} © (2007-08-05 21:51) [36]> [26] KLAUS_ (05.08.07 21:39)
<Вот это данные файла>
Например нужно зашифровать <данные>, так вот они находятся по смещению от начала файла 9 байт и имеют длинну 6 байт....
Как ты определяешь 9 и 6 ???? И зачем строки при этом использовать?? Ты-ж с байтами работаешь....
← →
KLAUS_ (2007-08-05 21:55) [37]Ну я бы определил так, от начала файла 9+6, вот эти от 9 до 15 шифровал бы!!
НО ВОТ КАК!!! Ну получается у меня байты заксорить......
Мог бы не обратился бы за помощью
← →
{RASkov} © (2007-08-05 21:58) [38]> [37] KLAUS_ (05.08.07 21:55)
Еще раз:fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
fs.Seek(<Начало>, soFromBeginning);
for i:=1 to <Длина> do begin
fs.Read(b,sizeof(b));
b:=b xor 1;
fs.Seek(fs.Position-1, soFromBeginning);
fs.Write(b, SizeOf(b);
end;
fs.Free;
← →
MetalFan © (2007-08-05 22:08) [39]
> fs.Seek(fs.Position-1, soFromBeginning);
а можно fs.Seek(-1, soFromCurrent);
← →
KLAUS_ (2007-08-05 22:14) [40]{RASkov} ВОТ!!
СПАСИБО ДРУГ, реально помог!!
MetalFan
ТОЖЕ ПРИКОЛЬНО!!
ВСЕМ СПАСИБО!!!
← →
{RASkov} © (2007-08-05 22:15) [41]> а можно fs.Seek(-1, soFromCurrent);
Можно.... разрешаю :)
Там еще много чего можно, делайте что хотите :о)
← →
{RASkov} © (2007-08-05 22:19) [42]> [40] KLAUS_ (05.08.07 22:14)
> {RASkov} ВОТ!!
> СПАСИБО ДРУГ,
А сам бы до этого не додумался бы? Даже если перечитать пару раз ветку....?
реально помог!!
Я рад.... думал не получится уже :)
← →
KLAUS_ (2007-08-05 22:25) [43]Реально я сделал, уже так
var
b: array[1..5]of byte;
BEGIN
form1.ListBox1.items.Add(path+srec.name);
fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
fs.Seek($00000000,soFromBeginning);
fs.Read(b,sizeof(b));
for i:=1 to sizeof(b) do
b[i]:=b[i] xor 1;
fs.Seek($000000000,soFromBeginning);
fs.Write(b,sizeof(b));
fs.Free;
Но твой вариант по удачней оказался!!
← →
KLAUS_ (2007-08-05 22:26) [44]Хотя смысл почти тот же.........
СПАСИБО ЗА ПОМОЩЬ!!!
Без тебя бы не получилось............
← →
Anatoly Podgoretsky © (2007-08-05 22:41) [45]> {RASkov} (05.08.2007 22:19:42) [42]
Так и не получилось, ты просто дал готовый код, остальное насмарку.
← →
{RASkov} © (2007-08-05 23:20) [46]> [45] Anatoly Podgoretsky © (05.08.07 22:41)
> Так и не получилось, ты просто дал готовый код, остальное насмарку
:)
Не думаю, что все именно так.... судя по [43] - чел что-то делал, и если не мой код, то и остался бы при своем мнении, т.е. использовать код из [43]
Ведь он тоже рабочий... хоть и не так интуитивно понятный(по крайней мере мне), но рабочий.... А так ему есть что с чем сравнить и сделать выводы....
Впрочем я и в самом деле не ожидал, что именно это ему и надо, так как он толком не мог объяснить, что ему вообще нужно, оказалось - угадал.
Я не против давать код, лишь бы код пошел на пользу другим, не обязательно авторам ветки....
А учением с нуля и "словами" не всегда есть хорошо и не всегда на форуме этим заниматься... и поэтому частенько просто решаю проблему с автором и все...
Если я чем-то нарушаю правила форума(или еще чего), скажите.
ЗЫ Я ни кого не хочу ни чему учить, просто показываю иногда дорогу, И придерживаюсь мнения: Кто хочет - тот научится, а кому это не надо, тот один хер откуда-нибудь скопипастит себе кусок кода, не поняв сути в нем и останется тем же неучем, кем и был до копипаста.
ЗЫЫ Впрочем в данном случае, наверное [45] - верно :) Так, как этот код я дал еще в [17], а автор не удосужился чуть-чуть его подправить....:(
Страницы: 1 2 вся ветка
Текущий архив: 2007.08.26;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.045 c