Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизРабота с файлами Найти похожие ветки
← →
AntonSh (2004-10-20 14:30) [0]Подскажите как в бинарный файл записать число в двоичном коде.
Что я имею ввиду: У меня есть переменная типа Integer (i := 101). Как мне записать это число в файл как битовое представление, тоесть когда я буду поблочно читать файл(блок по три бита) на выходе я должен получить число 5.
← →
Jay (2004-10-20 14:48) [1]Преобразуешь в десятичное и спокойно записываешь в файл
← →
AntonSh (2004-10-20 14:49) [2]А как это сделать? И каким образом мне потом считать 3 бита из файла?
← →
Jay (2004-10-20 14:54) [3]str1 := IntToStr(i);
number := 0;
for j := 1 to str1 do
if str[j] = 1 then number := number + exp(j * ln(2));
Может где ошибся проверь..
← →
Rem © (2004-10-20 14:55) [4]>>поблочно читать файл(блок по три бита)
Трех бит недостаточно для представления десятичных цифр.
А писать/читать - как нетипизированный файл - BlockWrite/BlockWrite. Как преобразовывать цифры из двоичного формата в двоично-десятичный - отдельный разговор.
← →
default © (2004-10-20 14:55) [5]AntonSh (20.10.04 14:49) [2]
единица адресации это байт, бит это единица информации
можешь считывать только кусками кратными байту
как сделано описано в книгах...это тема уж больно проста...
дурацкое всё-таки название-бинарное!о чём оно говорит?
да ни о чём если откинуть смысл который ему присвоили давно(приравняли к нетипизированному файлу)
все файлы бинарные потому ни о чём и не говорит, другое дело говорить нетипизированные - всё сразу понятно
← →
Jay (2004-10-20 14:56) [6]В файл запишется не три бита, а один байт значение которого = 5
← →
Cosinus © (2004-10-20 14:59) [7]
>... тоесть когда я буду поблочно читать файл(блок по три бита)
> на выходе я должен получить число 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 этот? Откуда он берется, а то есть у меня одно легкое подозрение... ;)
← →
begin...end © (2004-10-20 15:00) [8]
> AntonSh
Ну и зачем это надо делать? Почему бы не писАть в файл сразу число 5 (в нормальном виде)? Или файл используется ещё для каких-то целей? Поподробнее, пожалуйста.
← →
Cosinus © (2004-10-20 15:02) [9]Я ступил, вместо бит увидел байт. Сорри.
А по теме, все сказано уже в [1
← →
AntonSh (2004-10-20 15:03) [10]Я обьясню зачем я это делаю. Мне надо сжимать строку(архивировать). Например строка - "Привет". Так как каждый символ это байт, то я присвоив букве П код 1001, р - 1011 и так далее подразумеваю эти коды как биты. Теперь записав это файл, он естевственно уменьшится. Может есть другой вариант?
← →
default © (2004-10-20 15:06) [11]AntonSh (20.10.04 14:30)
оно и так будет писать в битовом представлении
только поясни на счёт блоков по 3 бита(
← →
Jay (2004-10-20 15:07) [12]Таким способом файл сжать не получится, потому что каждая буква в нём байт, а каждий символ, который ты питаешся записать тоже байт, почитай лучше про способы сжатия, например методом Хаффмана.
← →
begin...end © (2004-10-20 15:08) [13]
> [10] AntonSh (20.10.04 15:03)
> Теперь записав это файл, он естевственно уменьшится.
За счёт чего?
← →
default © (2004-10-20 15:08) [14]AntonSh (20.10.04 15:03) [10]
у тебя слова состоят всего из 2^4=16 букв?
← →
AntonSh (2004-10-20 15:09) [15]Читал я Хаффмана. Ну так там каждая буква и представляется битами. А записать их как?
← →
begin...end © (2004-10-20 15:10) [16]Одним битом ты можешь представить только две буквы.
← →
Digitman © (2004-10-20 15:12) [17]
> Мне надо сжимать строку(архивировать).
тебе не хватает ZLib ?
> каждый символ это байт
в Юникоде - это 2 байта... так что утверждение неверно
> я присвоив букве П код 1001, р - 1011
для начала определись с множеством используемых литер и их кодов ... сколько их всего различных у тебя будет ?
> записав это файл, он естевственно уменьшится
велосипед изобретаешь
← →
AntonSh (2004-10-20 15:14) [18]Подскажите тогда что нибудь простое и эффективное.
← →
Jay (2004-10-20 15:15) [19]В байте 8 бит, делаешь строку, добавляешь к ней текущее число (естественно в бинарной форме), если строка > 8, отрезаешь восемь символов и пишешь в файл и так далее, распаковка наоборот, только в файл ещё надо записать полученые коды символов.
← →
MBo © (2004-10-20 15:17) [20]>AntonSh
Ну вот там, где ты читал о Хаффмане, и должна быть реализация битового потока. В книге Бакнелла, например, есть хорошая.
Можно и самому сделать с нуля или на основе TBits.
← →
Jay (2004-10-20 15:18) [21]Самое простое пишешь просто текстовый файл, а потом с соответствующими параметрами запускаешь winrar или winzip, вот и все дела :))
← →
AntonSh (2004-10-20 15:22) [22]Jay обьясни пожалуста свой метод с добавлением символов к строке. Что значит в бинарной форме и что за текущее число?
← →
default © (2004-10-20 15:22) [23]MBo © (20.10.04 15:17) [20]
ну и намудрил этот Бакнелл с O-нотацией...
← →
Jay (2004-10-20 15:28) [24]Лушше используй [21], а если уж совсем нельзя, то объясняю:
К строку добавляешь двоичный код (строку) текущего символа, пока она не станет >= 8, так как в байте 8 бит, тоесть ты получаешь полный бит в двоичной форме (строку), преобразуешь её в десятичное (оно получится от 0 до 255) и записываешь в файл..
Ещё вопросы..
← →
AntonSh (2004-10-20 15:33) [25]Всё спасибо разобрался
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.034 c