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