|
Приведение типов
Казалось бы, простая задача — прибавить к дате
несколько дней. Дата хранится в структуре SYSTEMTIME, для выполнения
арифметических операций её обычно преобразуют сначала в формат FILETIME
(количество 100-наносекундных интервалов, прошедших с 1 января 1601 года),
а затем в 64-битное целое (ведь FILETIME является структурой, и потому
непосредственные арифметические операции над ней невозможны). Вот тут-то
современные программисты в полной мере показывают, на что они способны!
const __int64 i100NanoSecInDay = (__int64) 10000000*60*60*24;
FILETIME ft;
__int64 time64;
// взяли адрес ft, преобразовали к указателю на тип __int64 и скопировали значение
time64 = *(__int64 *) &ft;
time64 += iDaysQty*i100NanoSecInDay; // прибавили нужное количество дней
*(__int64 *) &ft = time64; // обратная операция
|
Я конечно не сторонник максимальной экономии байтов и микросекунд,
но ведь такой код и читается с трудом. Можно писать гораздо проще:
const __int64 i100NanoSecInDay = (__int64) 10000000*60*60*24;
union
{
FILETIME ft;
__int64 time64;
};
time64 += iDaysQty*i100NanoSecInDay; // прибавили нужное количество дней
|
Некоторые аккуратные программисты используют функцию memcpy,
чтобы упростить текст, но от этого становится ещё более грустно...
| |