Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1153814754
Pazitron_Brain
2006-07-25 12:05
2006.08.20
Можно соединить КПК с


2-1154315364
n@vichok
2006-07-31 07:09
2006.08.20
Please help


3-1150448620
sid_m
2006-06-16 13:03
2006.08.20
Удаленный вызов хранимой процедуры


4-1146219048
Creative
2006-04-28 14:10
2006.08.20
как избавиться от мерцания?


2-1154521875
Sirus
2006-08-02 16:31
2006.08.20
Работа с EXCEL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский