Як вважати файл бітам
Як вважати файл бітам?
Здраствуйте.
Підкажіть будь ласка яким чином можна вважати файл бітам. Найближче до цього що у мене виходить це зчитування файлу по байтам за допомогою BlockRead (F, Buf, 1). Далі я не знаю що робити. Допоможіть будь ласка.
Зараннее вдячний.
> Підкажіть будь ласка яким чином можна вважати файл
> Бітам.
Ніяк.
> Далі я не знаю що робити.
Розкласти отримані байти на біти.
О! Друге пришестя. Зовсім недавно було те ж саме.
> Підкажіть будь ласка яким чином можна вважати файл # XA0; бітам.
Спочатку записати його по бітам, потім вважати.
> Допоможіть будь ласка.
Відразу під назвою конференції є елемент введення "пошук" і кнопка "знайти". Це питання обговорювалося неоднакратно.
А хтось відповідав навіщо це потрібно?
Якщо так закортіло, то можна таким чином:
1. Відображаємо файл в пам'ять
2. Тепер працюємо з ним як з байтовим масивом, зчитуючи потрібний біт наступної ф-ией (взята з модуля QStrings):
function Q_BitTest (P: Pointer; Index: Integer): Boolean;
asm
# XA0; # XA0; # XA0; # XA0; BT # XA0; # XA0; # XA0; [EAX], EDX
# XA0; # XA0; # XA0; # XA0; SETC # XA0; # XA0; AL
end;
Тепер про Пойск і кнопку Знайти
# XA0; # XA0; # XA0; # XA0; Коли я набираю фразу "файл бітам" з'являється порожнє вікно. І все. Може я щось не правильно роблю.
Одним словом, усім СПАСИБІ ВЕЛИЧЕЗНЕ за відповіді :)
Anatoly Podgoretsky ви не зрозуміли. Мені потрібен саме доступ до бітам, тому що потрібно кожен з них поставити на раннє певну мною бітову позицію.
Там що то Amoeba говорив про це. Чи не можна поподрбнее. Я не програміст. Я зв'язківець.
Заздалегідь дякую.
1. TBits не підійде?
2. Set of 0..7 не підійде?
Особисто я б в даній ситуації визначив би такі два типи:
TMyBits = (Bit0, Bit1, Bit2. Bit63);
TSetOfMyBits = Set of TMyBits;
Потім Новомосковскл б файл блоками по 8 байт в змінну типу TSetOfMyBits (або # XA0; вже лічений файл розбирав б цими ж блоками копіюючи в таку ж змінну).
Хоча якщо згадати
> Потім ця програма (швидше за цей алгоритм) буде зашитий в процесор.
я б розробляв цей алгоритм з урахуванням системи команд конкретного мікропроцесора.
Видали пробіл між ". Htmlfile_i" і "d = app-bits"
Германн, мені препод сказав що б я спочатку ето все промоделювати на компі на прикладі wav файлу. Тобто потрібно зашифрувати wav файл поки. А голосові дані вже потім на процесорі.
Але все одно спасибі тобі за допомогу :)
Ось! Нарешті вимовлено ключове слово "препод". Так би відразу і говорив.
> # XA0; А голосові дані вже потім на процесорі.
Уточни предмет препода. Якщо це "Мікропроцесори", то тобі доведеться робити дві різні роботи. Одну на Паскалі, другу на МК.
ЦЕ МОЯ Магістерська робота :)))))))
Я ж не просив кричати "Я НАЙБІЛЬШИЙ ВЕЛИКИЙ Волш.". Пардон, це вже було в якомусь дитячому "кине".
Германн
> Особисто я б в даній ситуації визначив би такі два типи:
TMyBits = (Bit0, Bit1, Bit2. Bit63);
TSetOfMyBits = Set of TMyBits;
while not Eof (F) do # XA0; # XA0; # XA0; # XA0; # XA0;
begin
BlockRead (F, Buf, 1);
А тут мені як бути?
Хоча в моєму випадку BlockRead (F, Buf, 8);
Це залежить від того, як ти сказав змінну F (File, File of TSetOfMyBits). І від того як ти прописав RESET (F.).
почитай нарешті про бітові операції - зрушення, маски, вичитувати файл шматками, кратними 8 байт і обробляй їх
а може такий код
зчитувати байт в змінну MyBite
для кожного байта
перевірка чи є на
етсь чи біт на 1 - му місці
a: = MyBite and 00000001
на другому
a: = MyBite and 00000010
і т.д. природно якщо a> 0 означає там є біт - якщо 0 - значить немає.
тобі це потрібно ?
Переклад байтів в біти:
function byte2str (B: byte): string;
var i: byte;
begin
# XA0; # XA0; result: = "";
# XA0; # XA0; for i: = 0 to 7 do
# XA0; # XA0; begin
# XA0; # XA0; if (B and 128) = 128 then result: = result + "1" else result: = result + "0";
# XA0; # XA0; B: = (B SHL 1);
# XA0; # XA0; end;
end;
Caption: = byte2str (4);
З урахуванням завдання, вони все таки будуть якось вводиться в пам'ять. Конечно не бітами, але, імхо, блоками.
> Або програма для програмування мікрочіпів вже і паскаль розуміє?
"Програма для програмування" нічого, крім довічних даних не приймає, але компілятором з Паскаля є. І я вже тут постил "гнівні висловлювання" про один з них. Хоча компілятором С для 51-процесорів є цілком прийнятні, якщо не враховувати оптимальність.
Ось дві функції:
function DecToBin (Dec: Byte): Integer;
begin
# XA0; Result: = (Dec div 1 mod 2) + (Dec div 2 mod 2) * 10 + (Dec div 4 mod 2) * 100
# XA0; # XA0; + (Dec div 8 mod 2) * 1000 + (Dec div 16 mod 2) * 10000
# XA0; # XA0; + (Dec div 32 mod 2) * 100000 + (Dec div 64 mod 2) * 1000000
# XA0; # XA0; + (Dec div 128 mod 2) * 10000000;
end;
function Bit (Bint: Integer; n: Byte): Byte;
begin
# XA0; Result: = Bint div Round (Exp ((8-n) * Ln (10))) mod 10;
end;
DecToBin переводить байт в двійкову запис, Bit витягує з двійковій запису байт по його індексу.