![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть выражение uint64_t result = *(uint64_t*)(&ts);
Как оно будет выглядеть в Delphi??? Вот вся функция struct TTimeStamp { int Time; // The Time field indicates the number of milliseconds that have elapsed since midnight. int Date; // The Date field indicates the number of calendar days since the start of the calendar (the number of days since 1/1/0001 plus one). }; uint64_t __fastcall DateTimeToInt64( TDateTime Value ) { TTimeStamp ts = DateTimeToTimeStamp( Value ); uint64_t result = *(uint64_t*)(&ts); return result; } |
|
#2
|
|||
|
|||
|
Ну, наверное, можно попробовать так:
Код:
type
TTimeStamp = packed record
Time Integer;
Date Integer;
end;
function DateTimeToInt64(Value : TDateTime) : Cardinal; // 64-bit unsigned int
var
ts : TTimeStamp;
begin
ts.Date := DaysBetween(EncodeDate(1,1,1),DateOf(Value))+1;
ts.Tme := MilliSecondOf(TimeOf(Value));
Result := Cardinal(ts);
end; |
|
#3
|
|||
|
|||
|
Чуть поправил и все ровно не работает как нужно
Код:
function DateTimeToInt64(Value : TDateTime) : Cardinal; // 64-bit unsigned int var ts : TTimeStamp; begin ts.Date := DaysBetween(EncodeDate(1,1,1),DateOf(Value))+1; ts.Time := MilliSecondOf(TimeOf(Value)); Result := Cardinal(ts.Date +ts.Time); end; А обратно как? Есть также функция на с++ Код:
//------------------------------------------------------------------------------
// Из uint64_t в TDateTime
//------------------------------------------------------------------------------
TDateTime __fastcall Int64ToDateTime( uint64_t Value )
{
TTimeStamp ts;
*((uint64_t*)(&ts)) = Value;
return TimeStampToDateTime( ts );
}Последний раз редактировалось yarockiisergei, 29.10.2015 в 09:14. |
|
#4
|
|||
|
|||
|
Интересует конкретно вот эта операция
Код:
*((uint64_t*)(&ts)) = Value; Есть вот такая структура type TDateTime = type Double; type TTimeStamp = record Time: Integer; // Число миллисекунд прошедших с полуночи Date: Integer; // Количество дней прошедших с 1 января 0001г end; function Convert_my() : TDateTime var ts: TTimeStamp; begin ts:= //Как сюда положить вот это число 3160610655694693 -? //Возможно только dt.Time dt.Date //В с++ все вроде как просто *((uint64_t*)(&ts)) = Value; и далее TimeStampToDateTime( ts ); Convert_my:= TimeStampToDateTime( ts); end; |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
|||
|
|||
|
Я узнал что можно вложить через указатель на структуру...
Вопрос как реализовать???? |
|
#7
|
|||
|
|||
|
Код:
var ts : ^Cardinal; begin New(ts); ts^ := 3160610655694693; |
|
#8
|
|||
|
|||
|
Да.... спасибо все заработало.
|