Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > TDate упаковать в 2 байта (Delphi)


Автор: Jees 6.5.2013, 16:12
Доброго времени суток!
Возникла задача записать дату в 2 байта таким образом:

 31 декабря 2020
11111 1010  0010100
  day  month   year

понимаю что нужно использовать битовые смещения, но сам в них не очень понимаю.
Что получилось на данный момент:
Код

var
  dt: TDate;
  aMonth, aDay: Word;
begin
  dt:=EncodeDate(2012, 12, 31);

  aMonth:=MonthOf(dt);
  aDay:=DayOf(dt);

  d:= LoByte(aDay) shl 3;
  m:=(LoByte(aMonth) shr 1) - $01;
  b:=d or m; // первый байт

end;


а с формированием второго байта затык....

Знатоки, подскажите пожалуйста  smile 

P.S. RAD Studio XE3

Автор: kami 6.5.2013, 16:47
Чегой-то я не очень понял.
Судя по 
Цитата(Jees @  6.5.2013,  16:12 Найти цитируемый пост)
11111 1010  0010100

день - самая старшая часть старшего байта.
а судя по
Цитата(Jees @  6.5.2013,  16:12 Найти цитируемый пост)
 d:= LoByte(aDay) shl 3;

это старшая часть младшего байта.

ку? Поясните, плиз.

Автор: Чучмек 6.5.2013, 18:49
Под год остается 7 бит  - 128 лет  Какой год считать нулевым?

Добавлено через 8 минут и 32 секунды
Цитата(Jees @  6.5.2013,  16:12 Найти цитируемый пост)
0010100
 надо думать 2000
Код

function DataEncode(day,month:byte;year:word):word;
begin
  result:=day or month shl 5 or (year-2000) shl 9;
end;


Автор: Чучмек 6.5.2013, 19:06
И обратно
Код

 day:=pd and $1F;
 month:= pd shr 5 and $F;
 year:=2000 + pd shr 9;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)