Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.06.2011, 18:38
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию Изъятия группы битов из DWord

Итак есть 4 байта данных и нам необходимо получить 4 числа по следующей схеме. Начиная с 9-го бита этой 32-битной последовательности взять 6 бит и полученный результат представить как символ/число. Затем уже с 15 бита снова взять 6 бит и сделать тоже самое, и так 4 раза сдвигаясь вправо по 6 бит.
Вот интересует ваше решение данной задачки ибо то как я это делаю мне как-то стремно даже выкладывать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #2  
Старый 28.06.2011, 19:33
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Представляю проект "Старая печатная машинка"

Код:
var
i:integer;
begin
...........................
 i:=63636363;
............................
 c1:=i shl 8;
 c1:=c1 shr 26;
 c2:=i shl 14;
  c2:=c2 shr 26;
  c3:=i shl 20;
  c3:=c1 shr 26;
  c4:=i shl 26;
  c4:=c4 shr 26;
end
Ответить с цитированием
  #3  
Старый 28.06.2011, 19:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ничего не понял.

Так что-ли:
Код:
var
  Src : DWORD;
  A : String[4];
  I : Integer;
begin
  Src := Src Shr 8;
  For I := 1 To 4 Do
    Begin
      A[i] := Chr(Src Or 63); // 63 = 00111111
      Src := Src Shr 6;
    End;
Ответить с цитированием
  #4  
Старый 28.06.2011, 19:39
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В общем и я так сделал, только я сдвиг влево и вправо объединил как одно действие. Есть еще варианты?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 28.06.2011, 19:41
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ага, а вот вариант lmikle уже несколько иначе работает. Уже интересно. Что еще интересно предложат пытливые умы.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 28.06.2011, 19:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Собственно это часть алгоритма кодирования Base64
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 28.06.2011, 19:43
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Ещё вариант:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
 DW: DWORD;  //32b
 B9, B15: Byte;    //8b
 i: Integer;
begin
 //DW:= 16128;   //00000000 00000000 00111111 00000000
 DW:= 1032192; //00000000 00001111 11000000 00000000
 B9:= 0; B15:= 0;
 For i:= 8 To 14 Do if ((DW Shr i) And 1) = 1 Then B9:= ((1 shl (i - 8)) Or B9);
 For i:= 14 To 20 Do if ((DW Shr i) And 1) = 1 Then B15:= ((1 shl (i - 14)) Or B15);
 //И.т.д.
 Form1.Caption:= IntToStr(B15); //B = 63, 111111
end;
__________________
If end Then begin;
Ответить с цитированием
  #8  
Старый 28.06.2011, 19:50
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  i: DWORD;
  i1, i2, i3, i4: Byte;
begin
  i:=$EF7D1D99; // 111011 110111 110100 011101 10011001
  i1:=(i shr 8) and $3f;
  i2:=(i shr 14) and $3f;
  i3:=(i shr 20) and $3f;
  i4:=(i shr 26) and $3f;
{
1D
34
37
3B
}
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter