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

Вниз

Работа с битами и байтами   Найти похожие ветки 

 
RUS1   (2002-03-29 12:46) [0]

Приветствую Вас господа!!!

Такая проблема:
Имею нетипизированный файл с массивом параметров,
каждый из которых содержится в одном 16-ти разрядном слове (один параметр занимает 2-а байта).
расшифровка слова следующая:
бит 0 признак достоверности
бит 1 и 2 признак выхода за режимные уставки
бит 3 знак переменной (положительная или отрицательная)
бит 4-15 само значение переменной впрямом коде

Вопрос как мне отдельно считать значения отдельно каждого бита в слове и проанализировать его
(типа если 0 то одно если 1 то чегото там другое)
и второе как мне из етих битов с 4 по 15 получить само значение параметра

Зарание благодарен!!!


 
Alx2   (2002-03-29 12:58) [1]

Битовые маски можно использовать.
Например, проверка 3-го бита:
Var
Bit3 : Boolean;
wrd : Word;
begin
Bit3 := (wrd and (1 shl 3))<>0;
End;

PS
Иногда удобнее использовать asm инструкции.


 
Alx2   (2002-03-29 13:06) [2]

Да, чуть не забыл :)
биты с 4..15:
value := wrd shr 4; где wrd - та самая "шифрованная" битовая структура


 
RUS1   (2002-03-29 13:34) [3]

Спасибо брат сейчас попробую...!!! )))


 
RUS1   (2002-03-29 13:41) [4]

А какой процедурой или функцией доставать из файла значение переменной wrd.
TFileStream.Read(wrd,2) подойдет? чтото у меня не выходит...:((


 
Alx2   (2002-03-29 13:46) [5]

Хм... А что именно не выходит?
Давай твой код посмотрим.


 
RUS1   (2002-03-29 13:57) [6]

procedure TForm1.Button1Click(Sender: TObject);
var
InputFile:TFileStream;
TMPInt :Integer;
Bytes :Word;
begin

InputFile:=TFileStream.Create(FileEdit.Text,fmOpenRead);
InputFile.Seek(64,1); читаю с 64 байта типа мне так надо
InputFile.Read(Bytes,2); читаю 2 байта в переменную Bytes
TMPInt:=Bytes shr 4; получаю переменную целочисленную с четвертого бита до конца я так понял?!
ResultEdit.Text:=intToStr(TMPInt); вывод на экран
InputFile.Free;
end;

Когда ето делаю то вместо значения в результате выходит 0!


 
Alx2   (2002-03-29 14:02) [7]


procedure Decode(wrd : Word; Var Reliability : boolean; Var isOut, Sign : byte; Var Value : Word);
begin
Reliability := (wrd and 1) = 1; // Достоверность
isOut := (wrd and 6) shl 1; { признак выхода за режимные уставки. Здесь я так понял, что этот признак есть неразъемная двухбитовая структура}
Sign := (wrd and 8) shr 3; // Знак
Value := wrd shr 4; // собственно, значение
end;



 
Alx2   (2002-03-29 14:09) [8]

>RUS1 (29.03.02 13:57)
Слушай, у тебя как биты считаются?
Для байта, напрмер?
У меня так :))
7 6 5 4 3 2 1 0

И еще:
Напиши чему равен этот прочитанный из файла bytes.


 
RUS1   (2002-03-29 15:10) [9]

Как считываются биты я не знаю я ж их не вижу!!)))
А bytes после считывания равен 0!
может не работает InputFile.Read(Bytes,2);?


 
Alx2   (2002-03-29 15:20) [10]

Открой этот файл, например, в FARе и посмотри что там по заданному смещению. Может 0?
Либо (на всякий случай) еще так можно попробовать:
Var F : file of word;
bytes : word;
begin
AssignFile(F,FileEdit.Text);
Reset(F);
Seek(F,32);
Read(F,bytes);
closeFile(F);
end;



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

Форум: "Основная";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
3-32630
NikNik
2002-03-19 13:04
2002.04.11
Быстрая навигация по таблице при помощи компонента TEdit


3-32693
Sergant
2002-03-21 12:43
2002.04.11
Отображение удаленных записей в Grid е


1-32826
Maxman
2002-03-27 13:58
2002.04.11
Нужно описание алгоритма


1-32853
atmospheric
2002-03-28 17:37
2002.04.11
удаление Item из ListView ?


1-32735
cypher
2002-03-30 01:08
2002.04.11
Мож кто знает?!





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