Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Внизбиты Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c