Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 447

/ вопрос закрыт /

Здравствуйте, уважаемые эксперты!

Имеется: массив бит ( ReadedBits = TByteArray (array of Byte) ).
Надо: разбить его на массив Int64 по группам из N бит.
0<N<65

Например:
Вход: 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1, n = 9
Выход: 010101000 | 111010101 | 01

Прим.: незначащие биты - старшие и должны быть заполнены нулями.

Т.е. 010101000 записывается в Int64 так:

00000000000000000000000000000000000000000000000000000010101000

А 10 так:

00000000000000000000000000000000000000000000000000000000000010

Приложение:
  1.  
  2. Int64Value := 0;
  3. for i:= 0 to Length( ReadedBits ) - 1 do
  4. begin
  5. Int64Value := Int64Value or ( ReadedBits[i] shl (i mod n) );
  6. if i mod n = n - 1 then
  7. begin
  8. ArrayAdd( Result, Int64Value );
  9. Int64Value := 0;
  10. end;
  11. end;
  12. ArrayAdd( Result, Int64Value );


Gooddy Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 25 июня 2011, 15:42
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 25 июня 2011, 19:06; участников в обсуждении: 3.
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 15:44 [#1]:

Ещё пример:
Вход: 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1, n = 20
Выход: 01010100011101010101 (одно число)

Вход: 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1, n = 2
Выход: 01 | 01 | 01 | 00 | 01 | 11 | 01 | 01 | 01 | 01 (одно число)

Если кому интересно применять такую штуку я хочу для криптографии.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 25 июня 2011, 15:44 [#2]:

И в чём проблема?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 15:45 [#3]:

Написано же

//Вот мои наработки, но работает очень нестабильно и в 90% случаев разделяет неверно.

Читай: "Найдите ошибку или сделайте за меня"
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 25 июня 2011, 15:50 [#4]:

Воспользуйся процедурой Move(). Только осторожно!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 15:50 [#5]:

Спасибо. Попробую.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 15:59 [#6]:

Не выходит. Дело в том что массив бит содержит в каждом байте 1 бит (как boolean).

Например для битов 01101011 будет массив
00000000 00000001 00000001 00000000 00000001 00000000 00000001 00000001

Вот так у меня всё некрасиво и неэффективно.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 25 июня 2011, 16:07 [#7]:

Переделай, шоб было лучше. Есть класс TBits, воспользуйся им.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 16:32 [#8]:

Сделал. Алгоритм всё равно надо править.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 25 июня 2011, 16:35 [#9]:

Цитата (Gooddy):

Readed

Finished MGIMO?
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 16:48 [#10]:

bugmenot: а в чём собстно проблема?

Вроде сделал. И разбивает хорошо. Если кому интересно кину сюда.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 25 июня 2011, 17:30 [#11]:

Prochitano - такой идентификатор гораздо лучше получится
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 17:37 [#12]:

bugmenot: надеюсь это шутка =).

Итак, сделал кодировку. Вот код кому надо.
фрагмент кода

Теперь возникла новая проблема. Декодировать это дело. Проблема в том что незначащие нулевые биты могут быть в любом элементе массива...

Поможет мне кто или новый вопрос задавать?
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 18:46 [#13]:

Понял что необходимо сохранять информацию о количестве недописанных бит в последнем элементе.

Пробую сделать декодер
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 25 июня 2011, 19:06 [#14]:

Облом. Всё выкинул, делаю заново.
Чисти код! Чисти код! Чисти код!

26 июня 2011, 23:39: Вопрос закрыт (решение принял автор вопроса — Gooddy): Просто забил

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.02 сек.