Tomsk Sysadmins Forum

Windows => Программирование => Topic started by: Shtafun on September 27, 2006, 16:32:37

Title: Как читать из файла по битам.
Post by: Shtafun on September 27, 2006, 16:32:37
Мне нужно прочитать с начала файла всего 32 бита, а затем выделять группы по несколько бит (и работать потом с ними), например, первый 5 битов отвечают за одно, затем 2 бита за другое и т.д.
Title: Как читать из файла по битам.
Post by: visual on September 27, 2006, 17:26:15
Quote from: Shtafun
Мне нужно прочитать с начала файла всего 32 бита, а затем выделять группы по несколько бит (и работать потом с ними), например, первый 5 битов отвечают за одно, затем 2 бита за другое и т.д.
читай двойными словами (DWORD), для работы с нужной группой бит накладывай маску логическим AND, при необходимости/для удобства делай сдвиг вправо на нужно кол-во разрядов и сравнивай... imho все прозрачно.
Title: Как читать из файла по битам.
Post by: Shtafun on September 27, 2006, 17:31:00
Quote from: visual
читай двойными словами (DWORD), для работы с нужной группой бит накладывай маску логическим AND, при необходимости/для удобства делай сдвиг вправо на нужно кол-во разрядов и сравнивай... imho все прозрачно.
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?
Title: Как читать из файла по битам.
Post by: visual on September 27, 2006, 18:00:18
Quote from: Shtafun
Давай на примере:
есть AAABBCCD слово.
0xAAABBCCD=10101010101010111011110011001101
Quote from: Shtafun
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
общепринято считать справа налево. соответственно 0 бит = 1, 8 бит = 0.
Quote from: Shtafun
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?
по смещению 2 стоит взведенный бит.
Title: Как читать из файла по битам.
Post by: Shtafun on September 27, 2006, 18:03:43
Quote from: visual
0xAAABBCCD=10101010101010111011110011001101

общепринято считать справа налево. соответственно 0 бит = 1, 8 бит = 0.

по смещению 2 стоит взведенный бит.
Ясно, а как мне выделить блок например из 4 бит?
Title: Как читать из файла по битам.
Post by: visual on September 27, 2006, 18:13:20
Quote from: Shtafun
Ясно, а как мне выделить блок например из 4 бит?
наложи маску. например, если нужно выделить блок из 4 бит по смещению 2, делаешь
0xAAABBCCD AND 0x3C (111100) = 0xC (1100)
Title: Как читать из файла по битам.
Post by: Shtafun on September 27, 2006, 18:17:50
Quote from: visual
наложи маску. например, если нужно выделить блок из 4 бит по смещению 2, делаешь
0xAAABBCCD AND 0x3C (111100) = 0xC (1100)
Спасибо, теперь все понятно
Title: Как читать из файла по битам.
Post by: nuclight on September 27, 2006, 19:41:53
Quote from: Shtafun
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?

А это зависит от того, что за данные ты обрабатываешь - гляди в спецификацию их формата.  Если это просто поток бит, то обычно в байте передается первым старший бит. Если слова - то тут уже зависит от представления Big Endian / Little Endian, и т.д.
Title: Как читать из файла по битам.
Post by: nuclight on September 27, 2006, 19:41:53
Quote from: Shtafun
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?

А это зависит от того, что за данные ты обрабатываешь - гляди в спецификацию их формата.  Если это просто поток бит, то обычно в байте передается первым старший бит. Если слова - то тут уже зависит от представления Big Endian / Little Endian, и т.д.