Author Topic: Как читать из файла по битам.  (Read 4692 times)

0 Members and 1 Guest are viewing this topic.

Offline Shtafun

  • Newbie
  • *
  • Posts: 28
  • Karma: +0/-0
Как читать из файла по битам.
« on: September 27, 2006, 16:32:37 »
Мне нужно прочитать с начала файла всего 32 бита, а затем выделять группы по несколько бит (и работать потом с ними), например, первый 5 битов отвечают за одно, затем 2 бита за другое и т.д.
« Last Edit: September 27, 2006, 16:34:24 by Shtafun »

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
Как читать из файла по битам.
« Reply #1 on: September 27, 2006, 17:26:15 »
Quote from: Shtafun
Мне нужно прочитать с начала файла всего 32 бита, а затем выделять группы по несколько бит (и работать потом с ними), например, первый 5 битов отвечают за одно, затем 2 бита за другое и т.д.
читай двойными словами (DWORD), для работы с нужной группой бит накладывай маску логическим AND, при необходимости/для удобства делай сдвиг вправо на нужно кол-во разрядов и сравнивай... imho все прозрачно.

Offline Shtafun

  • Newbie
  • *
  • Posts: 28
  • Karma: +0/-0
Как читать из файла по битам.
« Reply #2 on: September 27, 2006, 17:31:00 »
Quote from: visual
читай двойными словами (DWORD), для работы с нужной группой бит накладывай маску логическим AND, при необходимости/для удобства делай сдвиг вправо на нужно кол-во разрядов и сравнивай... imho все прозрачно.
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
Как читать из файла по битам.
« Reply #3 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 стоит взведенный бит.

Offline Shtafun

  • Newbie
  • *
  • Posts: 28
  • Karma: +0/-0
Как читать из файла по битам.
« Reply #4 on: September 27, 2006, 18:03:43 »
Quote from: visual
0xAAABBCCD=10101010101010111011110011001101

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

по смещению 2 стоит взведенный бит.
Ясно, а как мне выделить блок например из 4 бит?

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
Как читать из файла по битам.
« Reply #5 on: September 27, 2006, 18:13:20 »
Quote from: Shtafun
Ясно, а как мне выделить блок например из 4 бит?
наложи маску. например, если нужно выделить блок из 4 бит по смещению 2, делаешь
0xAAABBCCD AND 0x3C (111100) = 0xC (1100)

Offline Shtafun

  • Newbie
  • *
  • Posts: 28
  • Karma: +0/-0
Как читать из файла по битам.
« Reply #6 on: September 27, 2006, 18:17:50 »
Quote from: visual
наложи маску. например, если нужно выделить блок из 4 бит по смещению 2, делаешь
0xAAABBCCD AND 0x3C (111100) = 0xC (1100)
Спасибо, теперь все понятно

Offline nuclight

  • Full Member
  • ***
  • Posts: 207
  • Karma: +1/-2
    • http://antigreen.org
Как читать из файла по битам.
« Reply #7 on: September 27, 2006, 19:41:53 »
Quote from: Shtafun
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?

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

Offline nuclight

  • Full Member
  • ***
  • Posts: 207
  • Karma: +1/-2
    • http://antigreen.org
Как читать из файла по битам.
« Reply #8 on: September 27, 2006, 19:41:53 »
Quote from: Shtafun
Давай на примере:
есть AAABBCCD слово.
1. Вопрос я не знаю какой считается 0 битом и какой 8 битом
2. У меня есть инфа  x бит и даны смещения : на примере смещение 2 что даст?

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