Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

обратная память   Найти похожие ветки 

 
race1   (2004-07-27 08:06) [0]

мне нужно прочитать заголовок файла, например, первые два байта, где первый байт плюс половина второго байта (11 бит) должно равняться FFF. в файле это записано так:
FF FD ...
а когда я читаю из TFileStream.Read(WordVar, 2), то в памяти хранится FD FF, т.е. наоборот. из-за этого неправильно находится значение нужных 11 байт - в файле всё верно (FFF), а в памяти получается FDF

как же быть?


 
ЮЮ ©   (2004-07-27 08:13) [1]

Читай побайтно


 
Kerk ©   (2004-07-27 08:14) [2]


> байт плюс половина второго байта (11 бит)

12 бит

var
 a: Word;
begin
 if (a and $FFF0) = $FFF0 then {бла-бла-бла}


 
ЮЮ ©   (2004-07-27 08:19) [3]

>а в памяти получается FDF

а ты точно именно в памяти это видишь? Это просто твой мозг меняет биты :-) Ну не приучен он ещё рассматрибать биты в памяти компьютера правмльно


 
race1   (2004-07-27 08:26) [4]

не знаю, где правильно, где нет, но если преобразовать число в WordVar в шестандатеричную систему, получим то что я сказал


 
Kerk ©   (2004-07-27 08:34) [5]


> не знаю, где правильно, где нет, но если преобразовать число
> в WordVar в шестандатеричную систему, получим то что я сказал

Просто в памяти обратный порядок байтов, а в твоем преобразовании порядок байтов нормальный. Поэтому выглядит по-разному.


 
ЮЮ ©   (2004-07-27 08:42) [6]

А если запишешь на диск онять получишь FFFD, сл-но для сравнения используй маску $F0FF


 
Kerk ©   (2004-07-27 08:46) [7]


> А если запишешь на диск онять получишь FFFD, сл-но для сравнения
> используй маску $F0FF

Чего-то ты не то говоришь.
Просто челу не надо ничего преобразовывать. Он такими методами геморроя потом не оберется... :)


 
ЮЮ ©   (2004-07-27 09:01) [8]

>Чего-то ты не то говоришь.
Проверь сам:

procedure TForm1.Button1Click(Sender: TObject);
var
 fs: TFileStream;
 w: word;
begin
 fs := TFileStream.Create("a.txt", fmCreate);
 w := $FDFF;
 fs.Write(w, 2);
 fs.Free;
end;

На диске будет записано FFFD


 
Kerk ©   (2004-07-27 09:07) [9]

Проверять не буду. Так вижу.


> в памяти хранится FD FF

Это меня с толку и сбило. Я не к тому числу маску делал.. :)


 
race1   (2004-07-27 13:15) [10]

это простейший случай с такой проверкой. но ведь при каждом чтении придётся как-то переворачивать память что бы было так как нужно мне. может все же есть решения красивые?


 
Anatoly Podgoretsky ©   (2004-07-27 13:43) [11]

Во втором байте только 8 бит, не 11


 
panov ©   (2004-07-27 13:49) [12]

Непонятно, что за задача у тебя?
Зачем заниматься таким преобразованием?


 
race1   (2004-07-27 15:31) [13]

потому что задумал я читать mp3 файл, там есть размеры фрейма по 4 байта. так эти размеры записаны в прямом порядке (43981 записано как AB CD) а когда я читаю в переменную, то получаю CD AB или как ещё перевёрнуто незнаю


 
panov ©   (2004-07-27 15:47) [14]

var
 WordWar: Word;
begin
 ...
 ...
 TFileStream.Read(WordVar, 2);
 ...
 WordWar := (WordWar shl 8)+(WordWar shl 8);


 
panov ©   (2004-07-27 15:47) [15]

WordWar := (WordWar shl 8)+(WordWar shr 8);


 
race1   (2004-07-27 16:13) [16]

это здорово, но для integer"а формула будет больше... вот блин, нет что бы в файл наперкосяк записать, было бы всё ок



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

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

Наверх




Память: 0.5 MB
Время: 0.1 c
1-1090821793
Андрей Л.
2004-07-26 10:03
2004.08.08
Как выделить узел в TreeView правой клавишей мыши?


1-1090855423
ilgam
2004-07-26 19:23
2004.08.08
Потоки: почемуто не работают таймеры в потоках


3-1089723069
STM
2004-07-13 16:51
2004.08.08
Pack dbf из Delphi


14-1089989650
ruslan
2004-07-16 18:54
2004.08.08
WebBrowser


1-1090403195
Андрей Л.
2004-07-21 13:46
2004.08.08
Как осуществить прокрутку в ScrollBox при помощи колеса мыши?