Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

И снова...и опять 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.043 c
2-1199879502
Washington
2008-01-09 14:51
2008.02.03
Проблема с загрузкой DLL


2-1199293276
Первокласник Вася
2008-01-02 20:01
2008.02.03
Как работать с дисками?


2-1199380082
vegarulez
2008-01-03 20:08
2008.02.03
Вопрос про поток...


2-1199426201
Alexandr Malygin
2008-01-04 08:56
2008.02.03
не отображается label на появляющейся на некоторое время форме


2-1199814308
fics
2008-01-08 20:45
2008.02.03
Рамочка вокруг компонетов, как её убрать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский