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

Вниз

биты   Найти похожие ветки 

 
cando ©   (2006-08-02 18:14) [0]

как осушествить в delphi побитное чтение и запись файла


 
Джо ©   (2006-08-02 18:17) [1]

Побитное чтение осуществить нельзя ни в Delphi, ни как-нибудь еще.


 
Desdechado ©   (2006-08-02 18:18) [2]

Файл - это поток байтов. Все операции с ними только как с байтами или (надстройка) с логическими единицами, состоящими из байтов.


 
Anatoly Podgoretsky ©   (2006-08-02 20:48) [3]

А уж побитовую запись вообще выполнить невозможно.


 
Rial ©   (2006-08-02 21:10) [4]

А так ?

Type
       TBit = 0..1;

Var F : File of TBit;
    B : TBit;
begin
Assign(F,"...");
B:=1;
ReWrite(F, B, SizeOf(TBit));
Close(F);
end;

))


 
Степан   (2006-08-02 21:15) [5]

Мельче, чем байт в языках высокого уровня наврятли можно считать/записать... Так что написанный выше пример [4] Rial © будет читать БАЙТ как минимум, но не бит! Конечно, можно для удобства на крайняк перефигачивать байт в массив битов


 
Джо ©   (2006-08-02 21:18) [6]

> Степан


> Rial ©

Ребята, не нужно своими фантазиями вводить в заблуждение начинающих, пожалуйста.


 
tesseract ©   (2006-08-02 21:23) [7]

> Мельче, чем байт в языках высокого уровня наврятли можно
> считать/записать...


Минимально адресуемая область памяти байтом и называется.


> [0] cando ©   (02.08.06 18:14)


если нужно проверить бит в файле, считай байт и разложи его на биты.


 
Степан   (2006-08-02 21:30) [8]

Например так...

type TBit = 0..1;
type TByteBits = array [0..7] of TBit;

...

// Старший бит - индекс 0, младший 7 (можно и наоборот)
function ByteToBits(Value: Byte): TByteBits;
var
 I: Integer;
 Temp: Byte;
begin
 for I := 0 to 7 do begin
   Temp := Value;
   Temp := Temp shl I; (или 7 - I, если наоборот)
   Temp := Temp shr 7;
   Result[I] := Temp;
 end;
end;


А потом работешь с этим массивом, работаешь и...

function BitsToByte(Bits: TByteBits): Byte;
var
 I: Integer;
 Temp: Byte;
begin
 Result := 0;
 for I := 0 to 7 do begin
   Temp := Bits[I];
   Temp := Temp shl (7 - I);
   Result := Result or Temp;
 end;    
end;


Вот так приблизительно... ВНИМАНИЕ! Код на Делфи не проверен, поэтому, если что, исправляй, редактируй, улучшай...


 
Rial ©   (2006-08-02 21:33) [9]

Чтение побитовое:

Type
       TByteBuffer=Array[0..7] of Byte;

Var F : Integer;
    BB : TByteBuffer;
    BPos, Pos, Len : Integer;

function ReadBit : Byte;
Var B : Byte;
    I : Integer;
begin
If (BPos>=7)then begin
 ReadFile(F, B, SizeOf(B));
 For I :=8 downto 1 do begin
  A[I] :=B and 1;
  B :=B shr 1;
 end;
 Inc(Pos);
 BPos:=0;
end;
Result:=BB[BPos];
Inc(BPos);
end;

function GetSize: Int64;
var
 Pos: Int64;
begin
 Pos := FileSeek(F, 0, 1);
 Result := FileSeek(F, 0, 2);
 FileSeek(F, Pos, 0);
end;

Var Bit : Byte;
begin
F:=FileOpen("...", fmOpenRead or fmShareDenyWrite);
Try
 Pos:=-1;
 BPos:=8;
 Len:= GetSize;
If (Len >0)then
 While (Pos < Len)do
  Bit:=ReadBit;
Finally
 FileClose(F);
end;
end;


 
Ketmar ©   (2006-08-02 22:22) [10]

> [9] Rial ©   (02.08.06 21:33)


> Чтение побитовое:

враньё. чтение тут побайтовое.


 
Джо ©   (2006-08-02 22:34) [11]

> [10] Ketmar ©   (02.08.06 22:22)
> враньё. чтение тут побайтовое.

Не вранье. Сказки, фантазии, иллюзии... 8)


 
Anatoly Podgoretsky ©   (2006-08-02 22:42) [12]

Джо ©   (02.08.06 22:34) [11]
По русски - лапша


 
isasa ©   (2006-08-03 09:04) [13]

:)
Я бы даже добавил.
Выборка из буфера устройства ввода/вывода - минимум побайтовая.
Так, на всякий случай. Что-бы не было ...
Сказки, фантазии, иллюзии...


 
palva ©   (2006-08-03 09:29) [14]

Физически запись и чтение с диска осуществляется блоками. Размер блока может быть разным, но уж точно за сотни байтов. Так что даже один байт записать на диск невозможно. Другое дело, что у программиста на паскале есть возможность организовать программу так, как будто он пишет или читает по одному байту, хотя на самом деле программа будет буферизовать ввод/вывод. Так же точно можно написать программы, которые имитировали бы битовый вывод, но стандартных средств для этого в паскале нет.


 
Palladin ©   (2006-08-03 09:47) [15]

У, блин... буквоед...


 
Desdechado ©   (2006-08-03 11:02) [16]

palva ©   (03.08.06 09:29) [14]
Буферизация, чтение блоками - это епархия операционки. Хочет - буферизует, хочет - нет. Доступ к файлу все равно побайтный.
Способ хранения в виде потока байтов все равно никуда не денется.



Страницы: 1 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
2-1153988032
1519
2006-07-27 12:13
2006.08.20
Завершение работы


2-1154552866
susergey
2006-08-03 01:07
2006.08.20
Абракадабра в TMemo


3-1150401719
keymaster
2006-06-16 00:01
2006.08.20
Детский вопрос


5-1137630535
Sp_pnz
2006-01-19 03:28
2006.08.20
Компонент кнопки со стилем BS_FLAT


2-1154343041
Darkwing
2006-07-31 14:50
2006.08.20
Как отобразить лист Excel в моей программе?