![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогитес двоичным числом разобраться
Kolan © (2004-12-11 16:14:00)Здравствуйте,
Задеча:
Есть 28 разрядное двоичное число. Это число задает 4 байта. Прервый 00llllll второй llllllll третий 00hhhhhh четвертый hhhhhhhh. Как из этого числа эти байты вычеслить. Формула?
Если не понятно то например(два байта):
Hbits := Value div 4;
if Hbits < 1 then
Hbits := 1;
Lbits := Value - Hbits * 4;
Value это десятичное число. В итоге имею 2 байта.
begin...end (2004-12-11 20:19:00) [21]> [9] uny © (11.12.04 19:52)
Что-что?
uny (2004-12-11 19:52:00) [22]...а кто по площадям...
begin...end (2004-12-11 19:22:00) [23]> [7] cyborg © (11.12.04 19:07)
Ну, во-первых, ему, насколько я понял, нужны не биты, а байты.
А во-вторых, непонятно, зачем использовать для хранения значения 1 бита целых 4 байта.
cyborg (2004-12-11 19:07:00) [24]Что-то типа этого?
Function GetBit(Var bytes : cardinal; num : byte) : cardinal;
begin
Result:=(bytes shr (num-1)) and 1;
end;
bytes - твои биты в 32 битовом числе, num - номер бита справа.
возвращает 1 или 0;
begin...end (2004-12-11 18:19:00) [25]> Kolan © (11.12.04 16:14)
Что-то Вы молчите, так что буду разговаривать сам с собой.
Есть очень простой способ решения:
var
Parts: array [0..3] of Byte;
Value: Cardinal absolute Parts;
begin
// Присваиваем значение переменной Value
// Работаем с каждым её байтом в отдельности как с элементом массива Parts
end.
> Если не понятно то например(два байта):
> Hbits := Value div 4;
> if Hbits < 1 then
> Hbits := 1;
> Lbits := Value - Hbits * 4;
> Value это десятичное число. В итоге имею 2 байта.
А здесь можно было, кроме способа, описанного выше, использовать стандартные функции Lo и Hi, т.к. байта всего 2.
Ну и, наконец, можно с помощью сдвигов и масок.
uny (2004-12-11 17:22:00) [26][4] наверно из 32 4 не используются:)))
begin...end (2004-12-11 17:15:00) [27]> Kolan © (11.12.04 16:14)
> Есть 28разрядное двоичное число. Это число задает 4байта.
Это как?
GanibalLector (2004-12-11 16:52:00) [28]> hhhhhhhh
Это как понять? В двоичной системе либо "0" либо "1".А то ШО?
uny (2004-12-11 16:39:00) [29][1] забыл - если байт не нулевой, то нужно так или иначе сдвинуть к нулевой позиции. т.е. по формуле получили число для первого(не нулевого) байта - нужно это число разделить на 2 в степени 8
uny (2004-12-11 16:35:00) [30]взять калькулятор - в виндовсе, переключить его в битовый режим и забить нужный байт единицами.
т.е. если нужен нулевой байт , то забить 8 единиц
если нужен первый, то 1111111100000000
вот, переключить калькулятор в десятичный вид и прочитать число.
а в своей проге написать
нужный байт:=(число содержащее все 4 байта) and (полученное в калькуляторе число);