Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
Доброе утро. С праздником всех. Хотелось бы задать такай вопрос. Пусть имеется алфавит из 33 русских букв и нек. служебных знаков (точки, запятые, тире, ...). Всего около 40 символов. Для кодирования кажого символа из этого алфавита потребуется log 2 40 = 6 бит. Можно использовать оптимальное кодирование, например, Шеннона-Фэно. В этом случае для кодирования может потребоваться от 1 до 40 бит. Вообще не подходит. А реально ли вообше такое реализовать* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 07:48 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
почитай про кодирование base64 только у тебя операции кодирования и декодирования поменяются местами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 15:52 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
по сабжу - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 17:36 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
miksoftпочитай про кодирование base64 только у тебя операции кодирования и декодирования поменяются местами base64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 17:36 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
Палестинецпо сабжу - нет Это я почти сразу понял. Но зато я много чего узнал и вспомнил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 17:38 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
artgonchbase64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке.так вот тебе нужно делать то же самое, только наоборот, и будет это base40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 20:09 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
maXmo artgonchbase64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке.так вот тебе нужно делать то же самое, только наоборот, и будет это base40. Что-то я не пойму, как. Ведь в один байт два символа уместить не получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 20:13 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
ну и что? умещай в полтора. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 20:30 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
[quot maXmo]ну и что? умещай в полтора. ------------------ лучше вообще это оставить. всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 20:39 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
artgonchА реально ли вообше такое реализовать* Если верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита. И подозреваю, что это близко к гарантированному пределу (в том смысле, что для любой схемы кодирования можно будет подобрать текст, который не упакуется лучше указанного). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 21:34 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита.48-и, простите. Хотя извращение конечно неслабое :) softwarer И подозреваю, что это близко к гарантированному пределу (в том смысле, что для любой схемы кодирования можно будет подобрать текст, который не упакуется лучше указанного).ээээ? Какие такие гарантированые пределы? Если алфавит состоит из 33+N букв, то самое плотное по битам кодирование текста будет 48-и буквенный алфавит в 11 бит. В десять бит можно запихать только 32-х буквенный алфавит. В двенадцать бит - 64-х буквенный. Это все конечно при условии, что у нас запрещена упаковка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 21:52 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
White Owl48-и, простите. Готов простить, но не вижу как их запихать :) White OwlЭто все конечно при условии, что у нас запрещена упаковка. Да и если разрешена, тоже. Именно к этому и относилась моя фраза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 03:30 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
Скорей всего задача абстракная.. практически - кому нужна экономия 2 / 8 bit ????? Советую автору хранить 1 символ в байте.. а для экономии места использовать другие методы - архивация напр... для текста даже простейший алгоритм будет на порядок эффективней чем твои побитовые псевдоэкономные упаковки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 10:35 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
Палестинецдля текста даже простейший алгоритм будет на порядок эффективней чем твои побитовые псевдоэкономные упаковки. Не знаю, что именно Вы называете "архивацией", но будет любопытно увидеть простейший алгоритм, способный упаковать текст, например, 12345678901357924680132547698....... без использования "псевдоэкономных упаковок". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 11:11 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
Не знаю, что именно Вы называете "архивацией", Архивацией я называю общеизвестный набор алгоритмов уменьшения объема массива данных(сжатия). (LZH) То как реализованы алгоритмы перекодировки символов у архиваторов, отличается от того что имеет ввиду автор.. вот и всё.. Поэтому надо хранить 1 символ в байте а если автор хочет уменьшить объем хранимых данных, надо ставить вопрос так - помогите найти алгоритм сжатия массива а не то что он написал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:04 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
softwarer White Owl48-и, простите.Готов простить, но не вижу как их запихать :)Элементарно, Ватсон! Разбиваем 11 бит на пару 6+5 бит (обозначим их как b6, b5). А дальше при помощи одной вспомогательной переменной: t=b6-47, c1=b6-t, c2=b5+t Вот тебе символы c1 и c2 от 0 до 47 каждый, и никакой упаковки. :) softwarer White OwlЭто все конечно при условии, что у нас запрещена упаковка.Да и если разрешена, тоже. Именно к этому и относилась моя фраза.Ну под упаковкой я понимаю традиционные принципы сжатия - замена повторяющихся кусков текста на ссылки в словарь. Тот же LZ например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 17:52 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
White OwlА дальше при помощи одной вспомогательной переменной: t=b6-47, c1=b6-t, c2=b5+t Хм. То есть t = b6 - 47 c1 = b6 - t = b6 - (b6 - 47) = 47 Что-то я не вижу здесь 48 разных символов :)) Есть подозрение, что Вы имели в виду не b6 - t, а b5 - t. Идея неплоха, но к сожалению если попробуете зашифровать-расшифровать текст с ее помощью, примерно каждый четвертый символ окажется искаженным. White OwlВот тебе символы c1 и c2 от 0 до 47 каждый, и никакой упаковки. :) Если честно, не верю. Поскольку суть Вашего высказывания такова: можно закодировать информацию так, что разным входным последовательностям соответствует одна и та же выходная (закодированная), а затем точно восстановить исходную информацию. А в это я не поверю, пока не увижу :) А когда увижу - полезу искать бога с плохим чувством юмора :)) White OwlНу под упаковкой я понимаю традиционные принципы сжатия - замена повторяющихся кусков текста на ссылки в словарь. Тот же LZ например. Хм. Алгоритмы битового сжатия куда более традиционны, чем байтовые :)) Но независимо от используемого алгоритма сжатия моя фраза остается справедливой: и LZ, и любой другой алгоритм не способны гарантировать успех (то, что "упакованная информация" не превысит размером оригинал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 20:23 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
softwarerХм. То есть t = b6 - 47 c1 = b6 - t = b6 - (b6 - 47) = 47 Что-то я не вижу здесь 48 разных символов :))Не, ну мы ж про биты говорим. Проводи рассчеты с беззнаковыми целыми. Впрочем, после второго взгляда этот принцип действительно не заработает. Проблема в том, что нельзя четко выделить t из разницы b6-31. То есть если b6 больше 31, то мы точно знаем что c1=31+t1, c2=31+t2, t1+t2=t. А вот величины этих t1 и t2 как узнать не понятно.... В общем, правильно не веришь :) Тогда откуда пришло вот это? softwarerЕсли верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 23:28 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
White OwlТогда откуда пришло вот это? softwarerЕсли верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита.[/quot] У нас есть 2048 различных комбинаций 11-ти бит, то есть мы можем зашифровать ими 2048 различных входных последовательностей (пар символов). Отсюда, если допустимы любые комбинации символов, получаем алфавит из sqrt (2048) букв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 10:38 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
если алфавит из 40 символов, то два символа - это 40*40 = 1600 сочетаний 8 бит - это 256 сочетаний 11 бит - 2048 сочетаний - сюда два символа упаковываются теоретически 2 символа должны упаковываться в 10,7 бит для большого потока с нормальным распределением... 2 символа можно упаковать в байт только с использованием механизма архивации и только для ненормального потока данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 10:24 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
softwarerУ нас есть 2048 различных комбинаций 11-ти бит, то есть мы можем зашифровать ими 2048 различных входных последовательностей (пар символов). Отсюда, если допустимы любые комбинации символов, получаем алфавит из sqrt(2048) букв. Тогда зашифровка и расшифровка будет B = C1 * 45 + C2 С1 = B / 45 C2 = B % 45 При C1 и C2 от 0 до 44, значение B будет от 0 до 2024, что дает нам еще 23 незадействованых комбинации. Можем пустить их на управляющие символы :) Помнится был какой-то древний процессор как раз с одиннадцатибитным байтом. Вот только как он назывался не могу вспомнить. Он бы как раз пригодился для данной задачи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 23:44 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
White Owlчто дает нам еще 23 незадействованых комбинации. Безусловно. Но этого слишком мало, чтобы извлечь что-то полезное для коротких текстов. При желании, безусловно, можно использовать и их, самое простое - как ключевые обозначения для типичных более длинных комбинаций (некая форма хаффмановского кодирования). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 13:41 |
|
||
|
Хранение двух символов в одном байте
|
|||
|---|---|---|---|
|
#18+
На эту тему - вспоминается одна история. Когда-то в детстве я написал "редактор заставок" - программу, которая позволяла нарисовать в цвете текстовый экран и сохранить его в файл. В какой-то момент объяснил одной из программисток моего отца, как им воспользоваться - типа рисуешь/сохраняешь, а в нужный момент берешь эти данные и простым memmove-ом пихаешь в видеопамять. Вопрос, который я услышал, меня просто убил. "Но ведь страница видеопамяти - это 4Кб, а файл размером 4000 байт ровно. Где оставшиеся?". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 13:45 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1347049]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 419ms |

| 0 / 0 |
