Главная страница
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;



Страницы: 1 2 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.022 c
3-1190716771
MZ
2007-09-25 14:39
2008.02.03
перенести файл БД под Linux


8-1173015027
ы
2007-03-04 16:30
2008.02.03
ошибка


2-1200229743
GhoulMaster
2008-01-13 16:09
2008.02.03
событи принятия сообщени в TTcpServer


2-1199519421
Kley
2008-01-05 10:50
2008.02.03
Вывод данных таблицы в QRmemo


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