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

Вниз

Как проверить возведён-ли определённый бит или нет?   Найти похожие ветки 

 
Первый раз тут   (2003-02-20 02:54) [0]

По сути мне надо составить массив из элементов типа Boolean.У меня есть файл и я знаю, что число из пяти байт это битовое поле.Всего 40 бит, мне надо сделать массив.И желательно как потом перевести это обратно.Хотя бы просто, как проверить возведён-ли в еденицу определённый бит?

Ещё: можно-ли открыть файл как например "file of Boolean"?И как с ним работать?


 
jack128   (2003-02-20 03:23) [1]

>>можно-ли открыть файл как например "file of Boolean"?И как с >>ним работать?
Можно. Так же как и с остальными типизиворанными файлами..

А получить значение бита ножно предлизительно так
(BitPos отсчитывать с нуля):
function GetBit(Data : pointer; BitPos : integer) : boolean;
var BytePos : integer;
begin
BytePos := BitPos div 8;
BitPos := 7 - BitPos mod 8;
Data := Pointer(Integer(Data)+BitPos);
Result := PByte(Data)^ and (1 shl BitPos);
end;


 
Хммм   (2003-02-20 03:52) [2]

>>можно-ли открыть файл как например "file of Boolean"?И как с >>ним работать?
Можно то можно, но врядли это то, что Вам нужно!
Думаю, что для сей задачи лучше всего подходит тип set.


 
jack128   (2003-02-20 04:45) [3]

Опечяточка вышла.. Правельно так :

function GetBit(Data : pointer; BitPos : integer) : boolean;
var BytePos : integer;
begin
BytePos := BitPos div 8;
BitPos := 7 - BitPos mod 8;
Data := Pointer(Integer(Data)+BytePos);//Тут была опечатка
Result := (PByte(Data)^ and (1 shl BitPos)) <> 0;
end;


 
Первый раз тут   (2003-02-21 14:07) [4]

Не получается чего-то :( Ведь в эту функцию надо передавать Pointer как число и BitPos как номер бита?А у меня есть число размером в 5 байт типа integer(я их читаю из файла) и их надо читать именно как 5 байт это одно число, а не по одному байту иначе расположение битов будет другое и читать их будет неудобно.
Как мне сделать это?


 
REA   (2003-02-21 14:09) [5]

TBits есть класс, но как туда числа запихать не знаю. Может перегрузить чего.


 
MBo   (2003-02-21 14:27) [6]

>Первый раз тут
Надо читать книжки


procedure TForm1.Button1Click(Sender: TObject);
var
a: array[0..4] of byte;

function CheckBit(BitNum: byte): Boolean;
begin
Result := (a[BitNum shr 3] and (1 shl (7 - BitNum mod 8))) <> 0;
end;

procedure SetBit(BitNum: byte; Value: Boolean);
begin
if Value then
a[BitNum shr 3] := a[BitNum shr 3] or (1 shl (7 - BitNum mod 8))
else
a[BitNum shr 3] := a[BitNum shr 3] and not (1 shl (7 - BitNum mod 8))
end;

begin
a[1] := $4;
SetBit(16, True);
SetBit(17, True);//установим
SetBit(17, False);//и сбросим
Caption := inttostr(a[2]) + " " + IntToStr(Ord(CheckBit(13)));
end;




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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
8-5661
Толик87
2002-11-13 13:39
2003.03.03
Склейка рисунков


1-5568
sdfjhgd
2003-02-18 21:31
2003.03.03
Вопрос по ListBox y


14-5779
Sergey Masloff
2003-02-13 16:16
2003.03.03
Осторожно - грипп!


8-5662
Victobur
2002-11-20 16:27
2003.03.03
Как сделать анимированную иконку


14-5831
Zhenka
2003-02-13 15:42
2003.03.03
Помогите с алгоритмом вычисления полинома





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