Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Есть такая задачка: в пространстве символов Код: plaintext 1. закодировать строку (массив) из такого пространства символов Код: plaintext 1. 2. 3. 4. 5. 6. я знаю как решается эта задача (наитупейший маппинг в цикле), если мы сделаем такое допущение: на один символ из пространства-отправителя приходится два символа из пространства получателя, например ё == cb, ж == cf и т.д. В этом случае outBuf.strlen() = initBuf.strlen() * 2 у нас целевое пространство 26 символов исходное пространство 26 * 2 + 33 * 2 + 10 + 34 = 162 символа парные комбинации из 26^2 = 676 / 162 = 4 значит существует возможность обеспечить outBuf.strlen() = initBuf.strlen() * ( 1 + 1 / 4 ) - - - - - - - Задача в следующем: произвести битовую упаковку, но только так, чтобы результат состоял только из символов пространства получателя, т.е. из а-z Дело в том, что мне всегда туго давались битовые операции на плюсах и максимум на что меня хватало это на организацию флаговой системы и то я постоянно путаю операции, какие из них сбрасывают, какие проверяют... Если можно подскажите как происходит запись и чтение я видел конструкции типа currentCharacter << 6 но у меня реально крышняк сносит чтобы не наделать ошибок, когда битовые комплекты одного символа голова в одном символе, а хвост в другом Ладно ещё когда можно использовать все битовое пространство, но в этой задаче можно использовать только битовое пространство соответствующее символам a-z (десятичные ascii коды 141 - 172, битовое с 01100001 - 01111001) и ещё забыл одно условие назвать: алгоритму должно быть пофиг в какой кодировке поставляется буфер с символами отправителями Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 20:38 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumixалгоритму должно быть пофиг в какой кодировке поставляется буфер с символами отправителями как это пофиг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 20:49 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumixмне всегда туго давались битовые операции на плюсах Ну и забей. Бери входной буфер как очень длинное целое число и переводи его в двадцатишестиричную систему как и любое другое число - делением с остатком. Делить-то ты, надеюсь, умеешь?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 20:55 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
ИзопропилLumixалгоритму должно быть пофиг в какой кодировке поставляется буфер с символами отправителями как это пофиг? Это означает, что нам должно быть пофиг какому числу соответствует символ, который мы ходим перевести. Например символу У в зависимости от разных кодировок будет соответствовать разные цифровые коды. Так вот в нашем алгоритме это пофиг. Мы исходим из того, что нашему коду уже поставляется готовый символ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 22:19 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovБери входной буфер как очень длинное целое число и переводи его в двадцатишестиричную систему как и любое другое число - делением с остатком. Мозгов не хватает перевести эту рекомендацию в код. Может кто-нибудь поможет? Dimitry SibiryakovДелить-то ты, надеюсь, умеешь?.. Вот эту операцию знаю, если речь о ней. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 22:22 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
LumixМожет кто-нибудь поможет? У ближайшей школы отлови какого-нибудь первоклашку, их как раз этому учат. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 22:37 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
LumixИзопропилпропущено... как это пофиг? Это означает, что нам должно быть пофиг какому числу соответствует символ, который мы ходим перевести. Например символу У в зависимости от разных кодировок будет соответствовать разные цифровые коды. Так вот в нашем алгоритме это пофиг. Мы исходим из того, что нашему коду уже поставляется готовый символ. Развитие этой идеи уходит к исследованиям Клода Шеннона. Для твоей-же задачи достаточно представить что ты программируешь телеграфный аппарат типа Т-63. Он передавал 5-битным кодом все символы русского алфавита, латиницы и цифр. Разумеестя у него были управляющие сигналы (controls) которые меняли регистр передачи. Для твоей машины нужно обязать самый редко-используемый символ (например 'q') сделать управлящим. Если приходит управляющий - то следующий за ним - является командой смены алвавита. Если управляющий задваивается 'qq' то это значит просто символ 'q'. Ну это так. По простому. По серъёзному надо анализировать частоты поли-алвавитного текста и вводить длинные цепочки символов алфавита A={a..z} для редких символов поли-алвавитного текста и наоборот. Дальше начинаются алгоритмы Хаффмена и LZW и простая телегарфия заканчивается. Начинаются архиваторы. И ты не ставь себе задачу архивации. Это тема долгая и нудная. А просто сделай переключение между регистрами и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 23:09 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
LumixМы исходим из того, что нашему коду уже поставляется готовый символ. это значит перекодирование из исходной в свою (0.. 161) уже произведено. не говори "пофиг" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2013, 23:15 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
ИзопропилLumixМы исходим из того, что нашему коду уже поставляется готовый символ. это значит перекодирование из исходной в свою (0.. 161) уже произведено. не говори "пофиг" Да, все верно: можно считать, что стоит задача упаковать последовательность чисел из диапазона 0 - 161 Код: plaintext 1. 2. Вот по такой схеме Код: plaintext 1. 2. 3. 4. 5. 6. При этом упаковка происходит в бинарную форму, а не в символьную. Рабочая гипотеза решения такая: 1) бинарное пространство дает чанки степени двойки, т.е. "вагончиками" могут быть только 1, 11, 111, 1111, 11111, ... т.е. "корзины" емкостью 2, 4, 8, 16, 32, 64, 128, 256, ... 2) если у нас 161 символ, то минимальный вагончик для нашей задачи 256 == 8 бит 3) количество символов получателей 26, значит для них минимальный вагончик 32 == 5 бит Код: plaintext 1. 2. 4) пространство, в которое мы хотим складывать это диапазон ascii адресов 97 - 122, но этот диапазон может быть представлен как 97 + (0 - 25) на этих тезисах получается такой алгоритм 1) конвертим строку в собственную 8-битную кодировку, где занятыми будут первые 162 символа 2) в новом цикле берем каждый символ (число) и конвертим его в бинарную форму и складываем в бинарный буфер (битовый массив) 3) в новом цикле считаываем из полученного бинарного буфера чанки по 5 бит, конвертим в десятичное число, прибавляем к этому числу 97, конвертим в символ ascii и складываем в строковый буфер раскодировка 1) в цикле читаем из буфера символ, конвертим его десятичное число, вычитаем 97, конвертим в 5 битный бинарник и складываем в бинарный буфер 2) в новом цикле читаем чанки по 8 бит, конвертим в десятичное число, преобразуем из своей 8 битовой кодировки в исходную строковую кодировку и складываем в строковый буфер Вопросы: 1) насколько это алгоритм взрослый? 2) как такое мутится средствами плюсов? где тут используется операция деления с остатком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 10:27 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
maytonИ ты не ставь себе задачу архивации. Это тема долгая и нудная. А просто сделай переключение между регистрами и всё. Эта задача не про архивацию, а про упаковку без архивации. Это задача про конвертацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 10:28 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumix, Посмотри как устроена кодировка Base64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 10:46 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
LumixmaytonИ ты не ставь себе задачу архивации. Это тема долгая и нудная. А просто сделай переключение между регистрами и всё. Эта задача не про архивацию, а про упаковку без архивации. Это задача про конвертацию. Ты не занимаешся конвертацией. Ты как раз пытаешся зачем-то делать архивацию. Зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 10:48 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumix3) в новом цикле считаываем из полученного бинарного буфера чанки по 5 бит, конвертим в десятичное число, прибавляем к этому числу 97, конвертим в символ ascii и складываем в строковый буфер В 5 битах может оказаться 31, 97+31=128 - упс, не попали в диапазон латинских букв... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 10:49 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumix Дело в том, что мне всегда туго давались битовые операции на плюсах и максимум на что меня хватало это на организацию флаговой системы и то я постоянно путаю операции, какие из них сбрасывают, какие проверяют... Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:09 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
авторЛадно ещё когда можно использовать все битовое пространство, но в этой задаче можно использовать только битовое пространство соответствующее символам a-z (десятичные ascii коды 141 - 172, битовое с 01100001 - 01111001) Я не понял, нафига тебе тут для этой задачи вообще нужны операции с битами. автори ещё забыл одно условие назвать: алгоритму должно быть пофиг в какой кодировке поставляется буфер с символами отправителями Это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:11 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovLumixмне всегда туго давались битовые операции на плюсах Ну и забей. Бери входной буфер как очень длинное целое число и переводи его в двадцатишестиричную систему как и любое другое число - делением с остатком. Делить-то ты, надеюсь, умеешь?.. Зачем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:12 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
LumixИзопропилпропущено... как это пофиг? Это означает, что нам должно быть пофиг какому числу соответствует символ, который мы ходим перевести. Например символу У в зависимости от разных кодировок будет соответствовать разные цифровые коды. Так вот в нашем алгоритме это пофиг. Мы исходим из того, что нашему коду уже поставляется готовый символ. Глупый, символ -- это и есть число. Там нет никакого соответствия, именно по значению числа ты и понимаешь, какой это символ. И это соответствие называется кодировкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:13 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Lumixи ещё забыл одно условие назвать: алгоритму должно быть пофиг в какой кодировке поставляется буфер с символами отправителями Код: plaintext 1. 2. 3. На самом деле я что-то ступил по жаре, тут же достаточно чтобы кодирование/декодирование было бы обратимым, тогда если абракадабра будет на входе, на выходе декодирования будет та же абракадабра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:15 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
MasterZivDimitry Sibiryakovпропущено... Ну и забей. Бери входной буфер как очень длинное целое число и переводи его в двадцатишестиричную систему как и любое другое число - делением с остатком. Делить-то ты, надеюсь, умеешь?.. Зачем ? Потом что исходное и конечное основание - не степень двойки, и множества не отображаются без дыр - без явного деления не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:20 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Коллеги, нафига это всё? Там всё просто, надо для каждый входной символ закодировать как (естественно) два символа из целевого алфавита. Что там он хочет битово закодировать -- не понятно совсем, это его фантазии. Пусть тогда излагает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:03 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
Я про это и говорю. Кто его вообще просит делат экономию на спичках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:07 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
MasterZiv Код: plaintext 1. 2. 3. 4. 5. 6. 7. Я эти операции знаю, но мне не хватает мозгов как ими читать и писать чанки Код: plaintext 1. 2. Битовый массив как я понял из примера выше задается вот так Код: plaintext 1. Буква z из нашей кастомной кодировки 0-161, которую мы ввели специально для целей данной темы соответствует десятичному коду 25, что в 8 битах означает 00011001 Вопрос первый как имея на руках десятичное число 25 записать в bitbuf скажем в 315 позицию (битовый адрес которой 315 * 8 = 2520) В принципе ответ очевиден Код: plaintext 1. Но при этом мы не использовали битовую адресацию. А как можно выполнить ту же самую операцию, но использовать именно битовую запись, указав при этом длину чанка 8 бит? Код: plaintext 1. 2. - - - - - - - Теперь имея в битбуфе чанки по 8 бит, наша задача в цикле брать порциями по 5 бит, добавлять к ним 97 и складывать полученное число в строковый буфер, рассчитывая при этом получать только ascii буквы a-z Код: plaintext 1. Как эта функция на плюсах выполняется? Тоже каким-то хитрым битовым шифтом? - - - - - - - Ещё возникает вопрос, поскольку сумма 8 битовых чанков не равняется сумме 5 битовых чанков (ну разве что при Summ = 40 как минимальный общий знаменатель), то возникает вопрос, как в цикле читая 5 битовые чанки мы сможем определить окончание и что нам делать в этом случае? Просто доращивать битбуф нулями, чтобы он делился на 5 без остатка? - - - - - - - - - возможно если будут ответы на эти вопросы, тогда вопросы по написания обратной процедуры (расширование) исчезнут сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:08 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
MasterZivЧто там он хочет битово закодировать -- не понятно совсем понятно всё, но программировать никто не хочет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:11 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
ИзопропилLumix, Посмотри как устроена кодировка Base64 http://base64.sourceforge.net/b64.c Смотрю в книгу вижу фигу. Не могу найти в этом коде кусок который показывает как читаются и пишутся битовые чанки заданной длины ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:16 |
|
||
|
Фильрованная битовая упаковка и распаковка на плюсах
|
|||
|---|---|---|---|
|
#18+
ИзопропилMasterZivЧто там он хочет битово закодировать -- не понятно совсем понятно всё, но программировать никто не хочет Никто не хочет доказывать что море солёное или солнце восходит в одном и том-же месте такой высокой ценой. Енкодер битовых цепочек или бит-последовательностей есть в любом архиваторе. Можно взять его исходники и посмотреть. Думаю там ничего интересного нет. Ниакой научной идеи тоже нет. Тривиальные побитовые операции и куча скушных проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38354890&tid=2020058]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 283ms |
| total: | 453ms |

| 0 / 0 |
