Текущий архив: 2008.02.03;
Скачать: CL | DM;
ВнизИ снова...и опять HEX Найти похожие ветки
← →
MOO (2008-01-05 22:42) [0]Воопсчем так, загружаю я фалег с помощью потока TFileStream и с помощью него читаю определенный блок байтов например: "00 00 00 D4 65 7F"
Я читаю выделенные четыре байта, но выходит так, что он их переворачивает и они становятся вида: "D4 00 00 00"
Может я что то неправильно делаю, но видел HEX редактор сделанный на DElphi там точно также. Есть какой-нибудь другой способ уже готовый или всё таки самому писать свою функцию?
← →
MOO (2008-01-05 22:43) [1]*файл
простите
← →
Reindeer Moss Eater © (2008-01-05 22:55) [2]что он их переворачивает
Кто "он"?
← →
MOO (2008-01-05 23:04) [3]Ну с помощью TFileStream пользуюсь его функцией Read
← →
{RASkov} © (2008-01-05 23:14) [4]> [3] MOO (05.01.08 23:04)
Что-то ты не так делаешь....
> Может я что то неправильно делаю, но
Во-во.... и я про то же)
← →
MOO (2008-01-05 23:15) [5]Думаешь? А объяснить что я не так делаю? ;)
← →
{RASkov} © (2008-01-05 23:18) [6]> [5] MOO (05.01.08 23:15)
Я тут не как многие.... я не телепат :)
← →
{RASkov} © (2008-01-05 23:22) [7]> [5] MOO (05.01.08 23:15)
Ты изъяснился бы яснее.... проблемным кодом поделился бы.... глядишь и в два счета решим твою траблу :)
← →
MOO (2008-01-05 23:26) [8]ТАм кода две строчки могли бы и сами догадатся
fs:= TfileStream.Create(name,fmOpenReadWrite);
fs.Seek(3, soFromBeginning);
fs.Read(BM, 4);
BM-Буффер
Так дело то еще в том, что как я уже сказал я видел такую проблему в HEX редакторе на DElphi. И что то мне кажется это не проблема, а так и должно быть. Короче наверно надо функцию писать
← →
{RASkov} © (2008-01-05 23:36) [9]> [8] MOO (05.01.08 23:26)
> BM-Буффер
А что это? Понятно, что буффер....(
Тогда бы уж так делать нужно
fs.Read(BM, SizeOf(Буффер));
Ты после открытия смещаешься на три байта
> fs.Seek(3, soFromBeginning);
А говоришь про первые 4 байта - это зачем, - запутать шпионов? :) Вообщем См [4] и исправляй ошибки)
> ТАм кода две строчки могли бы и сами догадатся
Нет уж.... я не гадалка :)
← →
palva © (2008-01-05 23:39) [10]> BM-Буффер
Что такое Буффер ? array[0..3] of Byte ?
Ну и дальше что было? BM[0] = D4 а в файле четвертый байт равен 00 ?
Вы уж рассказывайте.
← →
MOO (2008-01-05 23:46) [11]Упс писал вручную не копипастил, конечно там не третий
← →
MOO (2008-01-05 23:48) [12]Короче ясно, что здесь не моя ошибка....
← →
{RASkov} © (2008-01-05 23:50) [13]> [10] palva © (05.01.08 23:39)
> Ну и дальше что было? BM[0] = D4 а в файле четвертый байт равен 00 ?
> блок байтов например: "00 00 00 D4 65 7F"
Что-то не совсем клеется, ну да ладно... :)
Получает то он
> и они становятся вида: "D4 00 00 00"
А вроде должны ттогда быть D4 65 7F 00....
ЗЫ: Нееее, я не телепат :)
← →
{RASkov} © (2008-01-05 23:51) [14]> [12] MOO (05.01.08 23:48)
> Короче ясно, что здесь не моя ошибка....
Неее... не, ты что.... ни в коем случае.... это всё Билл.... он такой сякой :)
← →
MOO (2008-01-05 23:54) [15]Блин, что то я всех запутал вот=)
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFilestream;
BM:integer;
begin
If opendialog1.Execute then
begin
fs:= TfileStream.Create(OpenDialog1.FileName,fmOpenReadWrite);
fs.Seek(20), soFromBeginning);
fs.Read(BM, 4);
edit1.Text:=IntToHex(BM, 2);
end;
end;
← →
MOO (2008-01-05 23:58) [16]и у seek кусок скобки убрать
← →
{RASkov} © (2008-01-06 00:03) [17]> [15] MOO (05.01.08 23:54)
Впринципе все верно, но не грамотно....
> fs.Read(BM, 4);
Заменить, я уже говорил, на
fs.Read(BM, SizeOf(BM));
ну и здесь
> edit1.Text:=IntToHex(BM, 2);
правильнее было бы наверное
edit1.Text:=IntToHex(BM, 8);
← →
{RASkov} © (2008-01-06 00:05) [18]Да, и на всякий случай, хотя думаю, что сам знаешь и это был только "кусок проблемного кода", но....
Утечки нам не нужны, т.е. Fs.Free; незабываем делать.... и желательно в блоке finally
← →
DVM © (2008-01-06 00:06) [19]
> MOO
ты бы сразу и говорил, что в integer читаешь, а то байты переварачиваются.
все нормально
если таким макаром в integer считать файл 00 00 00 01, то в integer будет 1000000
← →
{RASkov} © (2008-01-06 00:07) [20]И в данном примере, файл должен быть не менее 24 байт, иначе все коту под хвост)
← →
DVM © (2008-01-06 00:09) [21]
> {RASkov} © (06.01.08 00:07) [20]
да в данном примере дело вообще не в файле, а в том КУДА он все это читает.
← →
palva © (2008-01-06 00:10) [22]Откуда вы взяли что переворачивает, если читаете в Integer? Вы байты читаете или четырехбайтовые целые? Почему вы думаете, что IntToHex даст вам байты в том же порядке, в каком они лежат в памяти?
← →
MOO (2008-01-06 00:11) [23]
> edit1.Text:=IntToHex(BM, 8);
Зачем 8
> если таким макаром в integer считать файл 00 00 00 01, то
> в integer будет 1000000
Если я спрошу как этого избежать то ты ответишь я полагаю, что делать не в integer? )
← →
DVM © (2008-01-06 00:13) [24]
> Почему вы думаете, что IntToHex даст вам байты в том же
> порядке, в каком они лежат в памяти?
я об этом же
← →
palva © (2008-01-06 00:15) [25]> Если я спрошу как этого избежать
Этого не надо избегать. Машина делает не то что вы хотите, а то что вы ей скомандовали. Надо чтобы первое совпадало со вторым.
← →
{RASkov} © (2008-01-06 00:16) [26]> [23] MOO (06.01.08 00:11)
> > edit1.Text:=IntToHex(BM, 8);
>
> Зачем 8
А затем, что бы отобразить 4 байтовый интегер в хекс представлении правильно.....
> Если я спрошу как этого избежать то ты ответишь я полагаю,
> что делать не в integer? )
Что в итоге хочешь добится?
← →
DVM © (2008-01-06 00:17) [27]
> Если я спрошу как этого избежать то ты ответишь я полагаю,
> что делать не в integer? )
дело не в самом integer, а в том как ты в этот integer помещаешь байты и как потом пытаешься смотреть.
← →
Германн © (2008-01-06 00:17) [28]
> Если я спрошу как этого избежать то ты ответишь я полагаю,
> что делать не в integer? )
Нет. Просто запомни раз и навсегда, что в памяти байты целого числа расположены не так как они написаны на бумаге.
← →
MOO (2008-01-06 00:18) [29]Хочу вернуть в обратное первоначальное положение соответственно
← →
DVM © (2008-01-06 00:18) [30]
> MOO
ты скажи что ты хочешь в результате получить?
← →
MOO (2008-01-06 00:20) [31]Хорошо хочу получить HEX в начально расположении
← →
DVM © (2008-01-06 00:20) [32]
> Хочу вернуть в обратное первоначальное положение соответственно
писать правильно сразу в файл не пробовал?
← →
{RASkov} © (2008-01-06 00:20) [33]> [31] MOO (06.01.08 00:20)
Читай побайтово...
← →
MOO (2008-01-06 00:23) [34]
> DVM
Я хочу сразу считать правильно)
> {RASkov} © (06.01.08 00:20) [33]
Еще какаие предложения
← →
DVM © (2008-01-06 00:24) [35]
> Я хочу сразу считать правильно)
Для того чтобы правильно считать, надо правильно туда положить.
← →
palva © (2008-01-06 00:24) [36]А потом в цикле каждый байт переводи в Hex Хлопотно, но надежно.
← →
{RASkov} © (2008-01-06 00:24) [37]> [34] MOO (06.01.08 00:23)
> Еще какаие предложения
Делай как знаешь....
Ты толком не можешь объяснить, что хочешь.... к советом прислушиваться не хочешь....
Какие могут быть предложения???
:)
← →
DVM © (2008-01-06 00:24) [38]
> Еще какаие предложения
Перевернуть в памяти
← →
MOO (2008-01-06 00:27) [39]
> Делай как знаешь....
> Ты толком не можешь объяснить, что хочешь.... к советом
> прислушиваться не хочешь....
> Какие могут быть предложения???
Для меня то понятно, что я объяснил. Видимо вы просто пропускали уроки Телепатии.
> DVM ©
Вот и я об этом думаю
← →
DVM © (2008-01-06 00:30) [40]
> Вот и я об этом думаюfunction ReverseBytes(const N: LongInt): LongInt;
begin
Result := ((N and $000000FF) shl 24) or ((N and $0000FF00) shl 8) or ((N and $00FF0000) shr 8) or ((N and $FF000000) shr 24);
end;
Страницы: 1 2 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.047 c