Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Кодировка данных, в 32-х разрядных словах.


Автор: BVSH 20.10.2004, 17:20
Есть слово равное 4 байтам (0-й, 1-й, 2-й, 3-й).
Добавлено @ 17:21
Есть слово равное 4 байтам (0-й, 1-й, 2-й, 3-й). Старшинство битов идет от 0 к 3. 0-й байт как обычно определяет метку слова по которой его можно определить. дальше идут какие то данные. Вопрос закл. в следующем. Биты 28, 27, 26, 25, 24 определяют время 28-й бит-16 часов, 27-8 часов, ... , 24-1 час, биты 23, 22, 21, 20, 19, 18 определяют тоже время но в минутах, т.е. 23 бит-32 мин, 22-16 мин. и т.д 18-1 мин. Таким образом получив значения битов от 28 по 18 определяется время. Пример: 28 ст.-1 0 0 0 1-мл. 16*1+8*0+4*0+2*0+1*1=17 часов, и минуты ст.р. 23-1 0 0 1 0 0-18 мл. разряд, имеем 32*1+0*16+0*8+1*4+0*2+0*1=36 минут. Имея уже сформированные слова, методом нехитрых a&(1<<n++) операций можно получить вполне понятное время, а если наоборот имея время в десятичном коде (напр. 22:32), преобразовать его в двоично десятичный. Кто нибудь может, что нибудь подсказать?

Автор: bel_nikita 20.10.2004, 22:01
А я что-то не понял проблемы :qstn

Автор: p0s0l 21.10.2004, 12:17
Цитата(BVSH @ 20.10.2004, 17:20)
преобразовать его в двоично десятичный.
У тебя обычный двоичный код, а не двоично-десятичный.
Если у тебя дано 22:32, то сдвигай
число 22 на 24 разряда влево
число 32 на 18 разрядов влево
и объединяй с помощью операции OR

В Си не силён, но типа такого будет:
Код
int hour = 22
int minute = 32

int result = (hour<<24)|(minute<<18);

Обратное преобразование (выделение часов и минут из месива):
Код

int mesivo = ...;

int hour = (mesivo>>24)&(0x1F);
int minute = (mesivo>>18)&(0x2F);

PS: к, примеру, под mesivo>>24 подразумевается сдвиг вправо на 24 бита (мало ли совсем не то написал...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)