Текущий архив: 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;
← →
MOO (2008-01-06 00:34) [41]Всем спасибо...DVM мне бы хотелось конечно, самому дойти до этой функции.
← →
{RASkov} © (2008-01-06 00:36) [42]> [39] MOO (06.01.08 00:27)
> Видимо вы просто пропускали уроки Телепатии.
Видимо....
Я в начале тебя об этом предупредил :)
Ты хочешь ХексВьювер сделать?
Если да, то может все-таки лучше с байтами работать, нежели с более "тяжелыми" элементами, а потом над ними еще и колдовать....
← →
palva © (2008-01-06 00:38) [43]Перевернуть целое можно такой функцией
function revint(n:Integer): Integer;
asm
BSWAP EAX
end;
вот пример использования
{$APPTYPE CONSOLE}
uses SysUtils;
function revint(n:Integer): Integer;
asm
BSWAP EAX
end;
var
d: Integer;
begin
d := $12345678;
WriteLn(IntToHex(revint(d), 8)); // 78563412
end.
← →
{RASkov} © (2008-01-06 00:39) [44]> [40] DVM © (06.01.08 00:30)
> [43] palva © (06.01.08 00:38)
Колдуны :)
← →
DVM © (2008-01-06 00:40) [45]
> Перевернуть целое можно такой функцией
надо же. как просто.
← →
MOO (2008-01-06 00:40) [46]
> Ты хочешь ХексВьювер сделать?
Нет, я просто разбираюсь с форматом файла одного. Поэтому ничего серьезного, просто интерес
← →
MOO (2008-01-06 00:42) [47]
> palva
> DVM
Спасибо, мда мне до этого далеко ;)
← →
palva © (2008-01-06 00:43) [48]> Поэтому ничего серьезного, просто интерес
Молодец. А то у нас тут все то препод задал, то начальник приказал. Противно вопросы читать. Интересующихся мало.
← →
{RASkov} © (2008-01-06 00:48) [49]> [48] palva © (06.01.08 00:43)
> Интересующихся мало.
Интерес бывает разный :(
Мало ли, что за файлик, форматом которого заинтересовался автор....
Шучу конечно, но... :)
← →
MOO (2008-01-06 00:54) [50]
> palva © (06.01.08 00:43) [48]
>
Ну не знай, если бы я учился в Высшем Учебном то может быть мой вопрос и был похожим на все эти.
> {RASkov}
Так всё таки и надо зачепить меня гг ;)
← →
{RASkov} © (2008-01-06 01:03) [51]> [50] MOO (06.01.08 00:54)
> > {RASkov}
>
> Так всё таки и надо зачепить меня гг ;)
Да не волнуйся ты так, все будет в шоколаде. Если, что зачипим, причипим.... вообщем, как говорится - поможем чем сможем :)
← →
DVM © (2008-01-06 01:04) [52]
> MOO
кстати, вот почитай про порядок байт и тому подобное:
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2
← →
Германн © (2008-01-06 01:06) [53]
> {RASkov} © (06.01.08 01:03) [51]
Диалог из недавно обсуждавшегося фильма:
Ипполит - Ты мне руку сломаешь.
Женя - Ничего. Сам сломаю, сам и вылечу.
:)
← →
{RASkov} © (2008-01-06 01:08) [54]> [53] Германн © (06.01.08 01:06)
Эх... точно (
:)
← →
MOO (2008-01-06 01:13) [55]
> DVM © (06.01.08 01:04) [52]
Читаю...
← →
{RASkov} © (2008-01-06 01:13) [56]> [53] Германн © (06.01.08 01:06)
Будем надеяться, что "тута никто никому ничего не сломал" :)
← →
{RASkov} © (2008-01-06 01:16) [57]> [55] MOO (06.01.08 01:13)
Вот эту можно почитать до кучи
http://www.podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html
.... пригодится)
Страницы: 1 2 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.08 c