Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› Реализация битовых типов в Delphi
Посл.ответ Сообщение

Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 17 мая 2007 10:16
· Личное сообщение · #1

Суть вопроса в следующем, как на Delphi реализовать структуру, прототип на С++ которой выглядит следующим образом

typedef struct _TEMP
{
int Count;
BYTE Param1 : 1;
BYTE Param2 : 1;
BYTE Param3 : 1;
BYTE Unused : 5;
} TEMP;

Вообщем, можно ли на Delphi, размер параметра в типе указать в битах?



Ранг: 35.1 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 17 мая 2007 10:55 · Поправил: Rouse_
· Личное сообщение · #2

type
TParams = (Param1, Param2, Param3);
TParamsSet = set of TParams;

TempStruct = packed record
Count: Integer;
Params: TParamsSet;
end;


проверка наличия включенного параметра
if (Param2 in TempStruct.Params) then



Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 17 мая 2007 13:08
· Личное сообщение · #3

Rouse_ пишет:
роверка наличия включенного параметра
if (Param2 in TempStruct.Params) then


Да, это что вроде того... но что делать с Unused? Как получить остальные 5 бит?

А ничего в Delphi такого стандартного нету?



Ранг: 35.1 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 17 мая 2007 13:57
· Личное сообщение · #4

А зачем получать Unused если оно действительно Unused?!
Ну расширь перечислимый тип на еще 5 Unused элементов



Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 17 мая 2007 14:37
· Личное сообщение · #5

Rouse_ пишет:
А зачем получать Unused если оно действительно Unused?!


Unused тут просто название элемента, оно тоже используется. Можно переименовать его в StronglyUsed

Rouse_ пишет:
Ну расширь перечислимый тип на еще 5 Unused элементов


Не удобно как то... надо потом получить эти 5 бит в байте, придется еще кучу кода писать

Мне надо вызвать из Делфи функцию из библы написанной на С++, вот эти заморочки никак обойти не могу... Точнее могу, но хочется как то попроще все сделать.



Ранг: 35.1 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 17 мая 2007 16:28
· Личное сообщение · #6

Ну если очень сильно хочется то извлекай пятибитовую перменную вот так:

FiveBitValue: Byte;
begin
Move(TempStruct.Params, FiveBitValue, 1);
FiveBitValue := FiveBitValue shr 3;


 eXeL@B —› Программирование —› Реализация битовых типов в Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати