Форум: "Основная";
Текущий архив: 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.007 c