powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Хранение двух символов в одном байте
23 сообщений из 23, страница 1 из 1
Хранение двух символов в одном байте
    #33562145
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро.
С праздником всех.
Хотелось бы задать такай вопрос.
Пусть имеется алфавит из 33 русских букв и нек. служебных знаков (точки, запятые, тире, ...). Всего около 40 символов. Для кодирования кажого символа из этого алфавита потребуется log 2 40 = 6 бит.
Можно использовать оптимальное кодирование, например, Шеннона-Фэно. В этом случае для кодирования может потребоваться от 1 до 40 бит. Вообще не подходит.
А реально ли вообше такое реализовать*
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33562735
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитай про кодирование base64
только у тебя операции кодирования и декодирования поменяются местами
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33562891
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сабжу - нет
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33562894
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftпочитай про кодирование base64
только у тебя операции кодирования и декодирования поменяются местами

base64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33562897
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Палестинецпо сабжу - нет

Это я почти сразу понял. Но зато я много чего узнал и вспомнил.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563035
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artgonchbase64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке.так вот тебе нужно делать то же самое, только наоборот, и будет это base40.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563039
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo artgonchbase64 не позволяет решить мою задачу, т.к. используется для представления двоичных (нетекстовых) данных в портабельной кодировке.так вот тебе нужно делать то же самое, только наоборот, и будет это base40.

Что-то я не пойму, как. Ведь в один байт два символа уместить не получится...
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563054
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и что? умещай в полтора.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563064
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot maXmo]ну и что? умещай в полтора.
------------------
лучше вообще это оставить.
всем спасибо
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563091
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artgonchА реально ли вообше такое реализовать*
Если верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита. И подозреваю, что это близко к гарантированному пределу (в том смысле, что для любой схемы кодирования можно будет подобрать текст, который не упакуется лучше указанного).
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563101
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита.48-и, простите.
Хотя извращение конечно неслабое :)

softwarer И подозреваю, что это близко к гарантированному пределу (в том смысле, что для любой схемы кодирования можно будет подобрать текст, который не упакуется лучше указанного).ээээ? Какие такие гарантированые пределы?
Если алфавит состоит из 33+N букв, то самое плотное по битам кодирование текста будет 48-и буквенный алфавит в 11 бит. В десять бит можно запихать только 32-х буквенный алфавит. В двенадцать бит - 64-х буквенный.
Это все конечно при условии, что у нас запрещена упаковка.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563279
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl48-и, простите.
Готов простить, но не вижу как их запихать :)

White OwlЭто все конечно при условии, что у нас запрещена упаковка.
Да и если разрешена, тоже. Именно к этому и относилась моя фраза.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563428
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорей всего задача абстракная.. практически - кому нужна экономия 2 / 8 bit ????? Советую автору хранить 1 символ в байте..

а для экономии места использовать другие методы - архивация напр...
для текста даже простейший алгоритм будет на порядок эффективней чем твои побитовые псевдоэкономные упаковки.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563484
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Палестинецдля текста даже простейший алгоритм будет на порядок эффективней чем твои побитовые псевдоэкономные упаковки.
Не знаю, что именно Вы называете "архивацией", но будет любопытно увидеть простейший алгоритм, способный упаковать текст, например,

12345678901357924680132547698.......

без использования "псевдоэкономных упаковок".
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33563570
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, что именно Вы называете "архивацией",

Архивацией я называю общеизвестный набор алгоритмов уменьшения объема массива данных(сжатия). (LZH)

То как реализованы алгоритмы перекодировки символов у архиваторов,
отличается от того что имеет ввиду автор.. вот и всё..

Поэтому надо хранить 1 символ в байте а если автор хочет уменьшить объем хранимых данных, надо ставить вопрос так - помогите найти алгоритм сжатия массива а не то что он написал...
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33564083
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 например.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33564233
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, и любой другой алгоритм не способны гарантировать успех (то, что "упакованная информация" не превысит размером оригинал).
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33564332
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-символьного алфавита.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33564500
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТогда откуда пришло вот это?
softwarerЕсли верить калькулятору, в 11 бит можно запихнуть два символа из 45-символьного алфавита.[/quot]
У нас есть 2048 различных комбинаций 11-ти бит, то есть мы можем зашифровать ими 2048 различных входных последовательностей (пар символов). Отсюда, если допустимы любые комбинации символов, получаем алфавит из sqrt (2048) букв.
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33566986
AL_KIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если алфавит из 40 символов,
то два символа - это 40*40 = 1600 сочетаний

8 бит - это 256 сочетаний

11 бит - 2048 сочетаний - сюда два символа упаковываются

теоретически 2 символа должны упаковываться в 10,7 бит для большого потока с нормальным распределением...

2 символа можно упаковать в байт только с использованием механизма архивации и только для ненормального потока данных
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33569316
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerУ нас есть 2048 различных комбинаций 11-ти бит, то есть мы можем зашифровать ими 2048 различных входных последовательностей (пар символов). Отсюда, если допустимы любые комбинации символов, получаем алфавит из sqrt(2048) букв.
Тогда зашифровка и расшифровка будет
B = C1 * 45 + C2
С1 = B / 45
C2 = B % 45
При C1 и C2 от 0 до 44, значение B будет от 0 до 2024, что дает нам еще 23 незадействованых комбинации. Можем пустить их на управляющие символы :)

Помнится был какой-то древний процессор как раз с одиннадцатибитным байтом. Вот только как он назывался не могу вспомнить. Он бы как раз пригодился для данной задачи :)
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33570665
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlчто дает нам еще 23 незадействованых комбинации.
Безусловно. Но этого слишком мало, чтобы извлечь что-то полезное для коротких текстов. При желании, безусловно, можно использовать и их, самое простое - как ключевые обозначения для типичных более длинных комбинаций (некая форма хаффмановского кодирования).
...
Рейтинг: 0 / 0
Хранение двух символов в одном байте
    #33570689
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На эту тему - вспоминается одна история. Когда-то в детстве я написал "редактор заставок" - программу, которая позволяла нарисовать в цвете текстовый экран и сохранить его в файл. В какой-то момент объяснил одной из программисток моего отца, как им воспользоваться - типа рисуешь/сохраняешь, а в нужный момент берешь эти данные и простым memmove-ом пихаешь в видеопамять.

Вопрос, который я услышал, меня просто убил. "Но ведь страница видеопамяти - это 4Кб, а файл размером 4000 байт ровно. Где оставшиеся?".
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Хранение двух символов в одном байте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]