Я бы держать свои данные в 3 байта, как
- первый байт = год
- второй байт = месяц
- третий байт = день
Там много места в каждом байте для области каждого поля (год, месяц, день). Вы могли бы написать их в целом с разрядным сдвигом операциями, например:
int year = 13;
int month = 7;
int day = 26;
int my_date = (year << 16) | (month << 8) | day;
Edit:
То, что я сделал в my_date: Я в основном сцепляюсь информацией, необходимой (год, месяц, день) в ряд бит (8 бит на информационное поле), в виде целого числа. Вы знаете, что int
- это 4 байта. Рассмотрим для начала, что my_date
является 0, то есть все 32 бита 0. 4 байта ней следующим образом («|» обозначает конкатенацию, это для удобства чтения):
my_date = 0 | 0 | 0 | 0
Когда я пишу year << 16
у меня есть
year << 16 = 0 | year | 0 | 0
подобным же образом,
month << 8 = 0 | 0 | month | 0
day = 0 | 0 | 0 | day
Когда я применить оператор OR на всех из них, my_date выглядит следующим образом:
my_date = 0 | year | month | day
Доступ их:
year = (my_date & 0xFF0000) >> 16;
month = (my_date & 0xFF00) >> 8;
day = my_date & 0xFF;
Edit: как доступ работает. Ранее мы имели
my_date = 0 | year | month | day
Если вы, к примеру, и с 0xFF00, который 0 | 0 | FF | 0
, вы получите
my_date & 0xFF00 = 0 | 0 | month | 0
Теперь все, что вам нужно сделать, это переместить ваши данные обратно, так
(my_date & 0xFF00) >> 8 = 0 | 0 | 0 | month = month
Надеюсь, теперь это яснее.
Ну, подумайте о том, сколько различных чисел можно представить с помощью одного байта: 256 . Таким образом, вы можете хранить любое число из 2 (десятичных) цифр (0-99) внутри одного байта, с большим количеством свободного места. Помогает ли это? – Cameron
Думаю, у меня есть идея, но как мне это сделать? Я использовал putc без sucess –
Что пошло не так с putc? – twin