Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2016, 15:03   #1
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
Сообщение Хитрый packed record

Добрый день.
Нужно перевести на делфи запись

typedef struct _FTSTAT {
DWORD fEof : 1;
DWORD fTim : 2;
DWORD fReserved : 25;
DWORD fDummy : 17;
DWORD cbInQue;
} FTSTAT;

Я знаю только http://docwiki.embarcadero.com/RADSt...ields_(Delphi) . А что делать с полями с выравниванием 17, 25 ?
Djaba вне форума Ответить с цитированием
Старый 17.01.2016, 15:18   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Так пойдет:
Код:
Type 
FTSTAT = record 
fEof: DWORD = 1;
fTim: DWORD = 2;
fReserved: DWORD = 25;
fDummy: DWORD = 17;
cbInQue: DWORD; 
end;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.01.2016, 15:19   #3
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

http://www.rvelthuis.de/articles/art...html#bitfields
Filka вне форума Ответить с цитированием
Старый 17.01.2016, 16:52   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Это не выравнивание, и битовые поля.
Код:
struct CELL {   // Declare CELL bit field
    unsigned short character  : 8;  // 00000000 ????????
    unsigned short foreground : 3;  // 00000??? 00000000
    unsigned short intensity  : 1;  // 0000?000 00000000
    unsigned short background : 3;  // 0???0000 00000000
    unsigned short blink      : 1;  // ?0000000 00000000
} screen[25][80];       // Array of bit fields
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.01.2016, 17:43   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Djaba Посмотреть сообщение
А что делать с полями с выравниванием 17, 25 ?
Если даже в новых версиях Delphi нет ключевого слова bitpacked, то эту структуру напрямую на нем не описать, нужно придумывать обходные пути. ЕМПИП, ключевое слово bitpacked в FPC есть.
Vapaamies вне форума Ответить с цитированием
Старый 17.01.2016, 17:50   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
нужно придумывать обходные пути.
Ну, для начала, надо придумать такое задание, при выполнении которого будет оправданным использование подобной свистоперделки.
А сам тип изобразить можно при помощи свойств и методов доступа.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2016, 10:19   #7
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
По умолчанию

Спасибо Filka, min@y™.
Тогда на примере
struct _CELL { // Declare CELL bit field
unsigned short character : 8; // 00000000 ????????
unsigned short foreground : 3; // 00000??? 00000000
unsigned short intensity : 1; // 0000?000 00000000
unsigned short background : 3; // 0???0000 00000000
unsigned short blink : 1; // ?0000000 00000000
} CELL;
буду пробовать делать так:

var character, foreground,intensity,background , blink :word;

type CELL = packed record
b_character:byte; //8 bits
b_foreground_intensity_background_b link:byte; //суммарно тоже 8 бит
end;
.........
character:=b_character;
foreground:= (b_foreground_intensity_background_ blink and $7);
intensity:= (b_foreground_intensity_background_ blink and $8) shr 3;
background:= (b_foreground_intensity_background_ blink and $70) shr 4;
blink:= (b_foreground_intensity_background_ blink and $80) shr 7;

Последний раз редактировалось Djaba; 18.01.2016 в 10:28.
Djaba вне форума Ответить с цитированием
Старый 18.01.2016, 10:24   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
буду пробовать делать так
А зачем всё это?
Как звучит задание в оригинале?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2016, 10:38   #9
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
По умолчанию

Сам оригинал большой и особой ценности не представляет. Выяснилось, что через двоеточие обозначается количество бит, выделяемое в записи под переменную. Компилятор делфи скорее всего не поддерживает подобный синтаксис (ну я нигде не нашел), и отдельные биты приходится вручную распихивать по переменным.

Последний раз редактировалось Djaba; 18.01.2016 в 10:43.
Djaba вне форума Ответить с цитированием
Старый 18.01.2016, 10:46   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сам оригинал большой и особой ценности не представляет.
Я не спрашивал про ценность, я спрашивал:
Цитата:
Как звучит задание в оригинале?
Ибо, тема очень сильно тянет вот сюда.

КОЛИСЬ ДАВАЙ, ПАРТИЗАН!!!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доступ к данным packed record bulldog5293 Общие вопросы Delphi 0 07.04.2013 12:59
Доступ к данным packed record Sergey_Murzinov Общие вопросы Delphi 1 27.11.2010 08:02
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
Для чего нужен Packed? VintProg Общие вопросы Delphi 10 03.08.2009 11:21