|
Вопрос # 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
Приложение: Переключить в обычный режим-
- Int64Value := 0;
- for i:= 0 to Length( ReadedBits ) - 1 do
- begin
- Int64Value := Int64Value or ( ReadedBits[i] shl (i mod n) );
- if i mod n = n - 1 then
- begin
- ArrayAdd( Result, Int64Value );
- Int64Value := 0;
- end;
- end;
- ArrayAdd( Result, Int64Value );
 |
Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 25 июня 2011, 15:42
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 14; последнее сообщение — 25 июня 2011, 19:06; участников в обсуждении: 3.
|
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™ (статус: Доктор наук), 25 июня 2011, 15:44 [#2]:
И в чём проблема?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 15:45 [#3]:
Написано же
//Вот мои наработки, но работает очень нестабильно и в 90% случаев разделяет неверно.
Читай: "Найдите ошибку или сделайте за меня"
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 25 июня 2011, 15:50 [#4]:
Воспользуйся процедурой Move(). Только осторожно!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 15:50 [#5]:
Спасибо. Попробую.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 15:59 [#6]:
Не выходит. Дело в том что массив бит содержит в каждом байте 1 бит (как boolean).
Например для битов 01101011 будет массив
00000000 00000001 00000001 00000000 00000001 00000000 00000001 00000001
Вот так у меня всё некрасиво и неэффективно.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 25 июня 2011, 16:07 [#7]:
Переделай, шоб было лучше. Есть класс TBits, воспользуйся им.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 16:32 [#8]:
Сделал. Алгоритм всё равно надо править.
Чисти код! Чисти код! Чисти код!
|
|
bugmenot (статус: 3-ий класс), 25 июня 2011, 16:35 [#9]:
Цитата (Gooddy):
Readed
Finished MGIMO?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 16:48 [#10]:
bugmenot: а в чём собстно проблема?
Вроде сделал. И разбивает хорошо. Если кому интересно кину сюда.
Чисти код! Чисти код! Чисти код!
|
|
bugmenot (статус: 3-ий класс), 25 июня 2011, 17:30 [#11]:
Prochitano - такой идентификатор гораздо лучше получится
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 17:37 [#12]:
bugmenot: надеюсь это шутка =).
Итак, сделал кодировку. Вот код кому надо.
фрагмент кода
Теперь возникла новая проблема. Декодировать это дело. Проблема в том что незначащие нулевые биты могут быть в любом элементе массива...
Поможет мне кто или новый вопрос задавать?
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 18:46 [#13]:
Понял что необходимо сохранять информацию о количестве недописанных бит в последнем элементе.
Пробую сделать декодер
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 25 июня 2011, 19:06 [#14]:
Облом. Всё выкинул, делаю заново.
Чисти код! Чисти код! Чисти код!
|
26 июня 2011, 23:39: Вопрос закрыт (решение принял автор вопроса — Gooddy): Просто забил
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|