Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Работа с файлами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.068 c
4-1094835656
nika_ufc
2004-09-10 21:00
2004.10.31
помогите со шрифтами


14-1097322651
GanibalLector
2004-10-09 15:50
2004.10.31
ДУША за 30 ЕВРО


8-1091519068
__guest
2004-08-03 11:44
2004.10.31
Получение видео/аудио потоков


14-1097498711
SeriousSam
2004-10-11 16:45
2004.10.31
Оцените прогу


1-1098083698
Kniaz
2004-10-18 11:14
2004.10.31
Контроль за исключениями