Штамп времени и байтовый массив - PullRequest
2 голосов
/ 18 мая 2010

Я пытаюсь вставить метку времени (час: мин: сек) в двухбайтовый массив, и я немного запутался, как это сделать ... любая помощь очень ценится!

int Hour = CTime::GetCurrentTime().GetHour(); 
int Minute = CTime::GetCurrentTime().GetMinute(); 
int Second = CTime::GetCurrentTime().GetSecond(); 

BYTE arry[2];

//Need to insert 'Hour', 'Minute', & 'Second' into 'arry'

Спасибо! * * 1004

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

Вы не можете. Потенциально в день может быть 86402 секунды (день может иметь до двух високосных секунд), но 16 битов, доступных вам в массиве byte[2], могут представлять только 65536 отдельных значений.

1 голос
/ 18 мая 2010
  1. час: мин: сек - это не то, что люди называют меткой времени. Временная метка - это количество секунд, прошедших с 1970-01-01, и она, безусловно, не умещается в 16 бит.
  2. Предполагая, что диапазоны часов = [0; 24], минут = [0; 60], секунд = [0; 60] (включая дополнительные секунды), вам потребуется 5 + 6 + 6 = 17 бит, которые по-прежнему не вписывается в 16 бит.

Если бы у вас был 32-битный массив, он бы подходил:

int Hour = CTime::GetCurrentTime().GetHour(); 
int Minute = CTime::GetCurrentTime().GetMinute(); 
int Second = CTime::GetCurrentTime().GetSecond(); 

uint8_t array[4];

// Just an example
*(uint32_t*)array = (Hour << 12) | (Minute << 6) | Second;

Это звучит как домашнее задание для меня ... или какова точная цель сделать это?

...