Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевод файла в троичной системе в аски и обратно.


Страницы:   1 2

bot77 ©   (2009-06-11 16:33:00) 

Собственно сабж. Дается файл в троичной системе счисления (состоящий из 0,1 и 2). Нужно перевести его в аски. И еще нужно функцию обратного перевода из аски в троичную.

Не нашел ни одной ф-ции перевода типа hextobin, как вообще называется троичная система?
Потом я так понял рассматривать нужно группы по 5 байт, но проблема в том что длина файла не обязательно кратна 5ти. В конце может остаться 2 байта например. Тогда я думаю можно в самом конце поставить контрольный символ из набора 256-3*3*3*3*3 и чтобы они означали длину последнего элемента. С алгоритмом вроде разобрался, а вот накодить нифига не получается, все время вылетает на обработке последних элементов, причем без разницы стринг я обрабатываю или беру из фала. Да и перевод из троичной системы в десятиричную сделал, а обратно фиг знает как. Может кто знает имя стандартной ф-ции конверсии? И подскажет как грамотно обработать звост если размер файла мод 5 больше нуля.


bot77   (2009-06-11 17:02:00) [21]

тоесть елси следовать дальше по логике
0 -> 0
1 -> 1
2 -> 10
3 -> 11
4 -> 100
5 -> 101
6 -> 110
7 -> 111
8 -> 1000
9 -> 1001
и тогда число 107 например должно быть 10111, но это не так. Можете обьяснить ваш подход?


bot77   (2009-06-11 16:52:00) [22]

Чтото я плохо вас понял.
одним аски символом я могу выразить 256 вариантов = 2*2*2*2*2*2*2*2
и 243 троичных варианта = 3*3*3*3*3
Скажем есть файл 20120102012010200101, тогда разбив на группы по 5
20120 10201 20102 00101, и делаю следующее
для 20120 = 2*81+1*9+2*3 = 177, вот я в результат и пишу chr(177).

ваш вариант мне показался очень интересным, но я его не понял, что на самом деле достаточно заменит все 2 на 10?


Ega23   (2009-06-11 16:40:00) [23]

Троичная запись -> Двоичная запись
0 -> 0
1 -> 1
2 -> 10

Соответственно, файл вида  20120102012010200101 будет выглядеть
1001100101001100101000101

Ну и, естественно, файл должен быть текстовым.


Ega23   (2009-06-11 16:37:00) [24]


> Потом я так понял рассматривать нужно группы по 5 байт,


С чего ты взял?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо