Форум программистов, компьютерный форум CyberForum.ru

Чтение бинарника по биту - C++

Восстановить пароль Регистрация
 
wiezz
Сообщений: n/a
03.04.2011, 18:45     Чтение бинарника по биту #1
Всем привет! Уважаемые, помогите пожалуйста!
Есть бинарный файл. Из него надо получить число, закодированное, например, в старших трех битах второго байта. Как это реализовать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 18:45     Чтение бинарника по биту
Посмотрите здесь:

Запись/чтение нуля из бинарника C++
C++ Считывание из бинарника
Чтение из БД C++
Чтение 16-и битных слов из бинарника (загрузка Wav) C++
C++ Доступ к нужному биту через битовые поля
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.04.2011, 21:07     Чтение бинарника по биту #2
Цитата Сообщение от wiezz Посмотреть сообщение
надо получить число, закодированное, например, в старших трех битах второго байта. Как это реализовать?
Считываете второй байт и накладываете маску для выделения нужных битов.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
03.04.2011, 21:12     Чтение бинарника по биту #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<fstream>
 
union{
    char sym;
    struct{
        unsigned u0:5;
        unsigned u1:3;
    }strObj;
}uniObj;
 
int main(){
    std::ifstream ifs("1.txt", std::ios::binary);
    if(!ifs){std::cerr<<"File not found"; return 1;}
    ifs.seekg(1).read(&uniObj.sym, 1); // чтение второго байта
    ifs.close();
    std::cout<<uniObj.strObj.u1<<"\n"; // три старших бита (unsigned int)
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.04.2011, 21:23     Чтение бинарника по биту #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
igorrr37, зачем же все так усложнять.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    unsigned char byte = 0;
    FILE *pfile = fopen("file.txt", "rb");
 
    fseek(pfile, 1, SEEK_CUR);
    fread(&byte, 1, 1, pfile);
 
    // byte содержит второй байт файла
    // ((byte & 0xE0) >> 5) - старшие три бита 
    
    printf ("%#x\n", (byte & 0xE0) >> 5);
}
wiezz
Сообщений: n/a
04.04.2011, 11:59     Чтение бинарника по биту #5
Спасибо огромное!
Yandex
Объявления
04.04.2011, 11:59     Чтение бинарника по биту
Ответ Создать тему
Опции темы

Текущее время: 18:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru