Главная страница
    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.044 c
2-1154497995
ExCode
2006-08-02 09:53
2006.08.20
форматирование кода delphi


3-1150376816
Pe+erBuild
2006-06-15 17:06
2006.08.20
ScroolBar DBGrid


2-1154143749
Василий
2006-07-29 07:29
2006.08.20
Как пользоваться функцией GetWindowplacement?


5-1127570241
bneuro
2005-09-24 17:57
2006.08.20
Помещение в DLL своего компонента


15-1152160956
vidiv
2006-07-06 08:42
2006.08.20
Как в iPod Nano залить музыку без участия его спец. проги?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский