Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизКак проверить возведён-ли определённый бит или нет? Найти похожие ветки
← →
Первый раз тут (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;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.008 c