Главная страница
    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.56 MB
Время: 0.039 c
14-5867
gn
2003-02-07 17:54
2003.03.03
irc


7-5898
Шонь-дзюнь
2002-11-21 12:41
2003.03.03
Блокировка монитора


14-5714
IronHawk
2003-02-02 19:00
2003.03.03
Поскажите где можно найти в электронном виде документацию по


9-5368
Cold_AYS
2002-10-01 19:46
2003.03.03
Заголовочные С файлы Half-Life SDK


3-5472
E_Dimon
2003-02-12 23:49
2003.03.03
SQL Запрос





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