Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.61 MB
Время: 0.033 c
2-1199868237
DevilDevil
2008-01-09 11:43
2008.02.03
Почему может возникать неправильная максимизация ?


2-1199609083
datorn
2008-01-06 11:44
2008.02.03
Tray


2-1199977556
Footballer
2008-01-10 18:05
2008.02.03
IP-адрес удалённого компа


3-1190631434
misha_gr
2007-09-24 14:57
2008.02.03
Уважаемый модератор раздела "Базы".


15-1199107075
Иксик
2007-12-31 16:17
2008.02.03
Посоветуйте русскую песню, чтобы немцам поставить :)