Главная страница
    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.48 MB
Время: 0.033 c
14-1090626329
anonim
2004-07-24 03:45
2004.08.08
Комерческий журнал хочет включить мою программу на CD


1-1090908343
Blick
2004-07-27 10:05
2004.08.08
Системные службы


1-1090498101
Ziko
2004-07-22 16:08
2004.08.08
Инсталляция приложения, создание ключей в реестре


1-1090565921
Jaxtor
2004-07-23 10:58
2004.08.08
Уничтожение всех объектов данного класса


1-1090593637
кш
2004-07-23 18:40
2004.08.08
мастера, помогите. про dialup-подключение





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