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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.03 c
3-1089586197
Daniil
2004-07-12 02:49
2004.08.08
Многострочный DBGrid


4-1088437839
MetalFan
2004-06-28 19:50
2004.08.08
как программно "залочить" комп?


14-1090571313
ИМХО
2004-07-23 12:28
2004.08.08
Утечка памяти в программе на Delphi


3-1089719178
denis24
2004-07-13 15:46
2004.08.08
adotable1.FieldByName( fl_prov ).Asboolean


1-1090477286
PhAn
2004-07-22 10:21
2004.08.08
Буквы CD-приводов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский