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

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

Работа с файлами


Страницы:   1 2

AntonSh ©   (2004-10-20 14:30:00) 

Подскажите как в бинарный файл записать число в двоичном коде.
Что я имею ввиду: У меня есть переменная типа Integer (i := 101). Как мне записать это число в файл как битовое представление, тоесть когда я буду поблочно читать файл(блок по три бита) на выходе я должен получить число 5.


AntonSh   (2004-10-20 15:33:00) [1]

Всё спасибо разобрался


Jay   (2004-10-20 15:28:00) [2]

Лушше используй [21], а если уж совсем нельзя, то объясняю:

К строку добавляешь двоичный код (строку) текущего символа, пока она не станет >= 8, так как в байте 8 бит, тоесть ты получаешь полный бит в двоичной форме (строку), преобразуешь её в десятичное (оно получится от 0 до 255) и записываешь в файл..
Ещё вопросы..


default   (2004-10-20 15:22:00) [3]

MBo ©   (20.10.04 15:17) [20]
ну и намудрил этот Бакнелл с O-нотацией...


AntonSh   (2004-10-20 15:22:00) [4]

Jay обьясни пожалуста свой метод с добавлением символов к строке. Что значит в бинарной форме и что за текущее число?


Jay   (2004-10-20 15:18:00) [5]

Самое простое пишешь просто текстовый файл, а потом с соответствующими параметрами запускаешь winrar или winzip, вот и все дела :))


MBo   (2004-10-20 15:17:00) [6]

>AntonSh
Ну вот там, где ты читал о Хаффмане, и должна быть реализация битового потока. В книге Бакнелла, например, есть хорошая.
Можно и самому сделать с нуля или на основе TBits.


Jay   (2004-10-20 15:15:00) [7]

В байте 8 бит, делаешь строку, добавляешь к ней текущее число (естественно в бинарной форме), если строка > 8, отрезаешь восемь символов и пишешь в файл и так далее, распаковка наоборот, только в файл ещё надо записать полученые коды символов.


AntonSh   (2004-10-20 15:14:00) [8]

Подскажите тогда что нибудь простое и эффективное.


Digitman   (2004-10-20 15:12:00) [9]


> Мне надо сжимать строку(архивировать).


тебе не хватает ZLib ?


> каждый символ это байт


в Юникоде - это 2 байта... так что утверждение неверно


> я присвоив букве П код 1001, р - 1011


для начала определись с множеством используемых литер и их кодов ... сколько их всего различных у тебя будет ?


> записав это файл, он естевственно уменьшится


велосипед изобретаешь


begin...end   (2004-10-20 15:10:00) [10]

Одним битом ты можешь представить только две буквы.


AntonSh   (2004-10-20 15:09:00) [11]

Читал я Хаффмана. Ну так там каждая буква и представляется битами. А записать их как?


begin...end   (2004-10-20 15:08:00) [12]


> [10] AntonSh   (20.10.04 15:03)


> Теперь записав это файл, он естевственно уменьшится.

За счёт чего?


default   (2004-10-20 15:08:00) [13]

AntonSh   (20.10.04 15:03) [10]
у тебя слова состоят всего из 2^4=16 букв?


Jay   (2004-10-20 15:07:00) [14]

Таким способом файл сжать не получится, потому что каждая буква в нём байт, а каждий символ, который ты питаешся записать тоже байт, почитай лучше про способы сжатия, например методом Хаффмана.


default   (2004-10-20 15:06:00) [15]

AntonSh   (20.10.04 14:30)  
оно и так будет писать в битовом представлении
только поясни на счёт блоков по 3 бита(


AntonSh   (2004-10-20 15:03:00) [16]

Я обьясню зачем я это делаю. Мне надо сжимать строку(архивировать). Например строка - "Привет". Так как каждый символ это байт, то я присвоив букве П код 1001, р - 1011 и так далее подразумеваю эти коды как биты. Теперь записав это файл, он естевственно уменьшится. Может есть другой вариант?


Cosinus   (2004-10-20 15:02:00) [17]

Я ступил, вместо битувидел байт. Сорри.
А по теме, все сказано уже в [1


begin...end   (2004-10-20 15:00:00) [18]


> AntonSh

Ну и зачем это надо делать? Почему бы не писАть в файл сразу число 5 (в нормальном виде)? Или файл используется ещё для каких-то целей? Поподробнее, пожалуйста.


Cosinus   (2004-10-20 14:59:00) [19]


>... тоесть когда я буду поблочно читать файл(блок по три бита)
> на выходе я должен получить число 5

Ха! По сабжу -
for i:=1 to Length(IntToStr(Str))
 if S[i]=1 then Write(f,$ff)
           else Write(f,$00);

С чтением я думаю понятно, но на мой взгляд записывать число в такомвиде это.. это... ну не знаю в общем слов просто нет. Записывать каждое число нужно в 1а не 3 байта (и собственно почему 3? Максимально возможное число 7 что ли?).
Кстати, а откуда вылезает 101 этот? Откуда он берется, а то есть у меня одно легкое подозрение... ;)


Jay   (2004-10-20 14:56:00) [20]

В файл запишется не три бита, а один байт значение которого = 5


Страницы:   1 2

Наверх

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