![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с файлами
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