Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
1

Как прочитать файл в бинарном режиме по 32 байта

27.01.2015, 14:15. Показов 4020. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, как считать файл в бинарном режиме (в двоичной системе счисления) по 32 байта,
попутно записывая эти 32 байта в переменную типа string ?
Делал так:
C++
1
2
3
ostringstream oss;
oss << std::bitset<32>(n);
str = oss.str();
но тогда получает 1 байт, с нулями
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2015, 14:15
Ответы с готовыми решениями:

Прочитать файл в бинарном режиме с записью результата в string
Привет, как можно прочитать файл в бинарном режиме, но чтоб каждый байт в двоичной СС записывало в...

Как открыть файл для чтения в БИНАРНОМ режиме?
Друзья! Файл, который надо открыть БИНАРНЫЙ, в нём два байта. Содержание файла 33 20 00 00 имя...

Запись в файл в бинарном режиме
Есть файл, 1.exe, как его открыть чтоб можно было записать в него свой hex код ?

Не удаётся открыть файл в бинарном режиме
Всем привет. Вроде делаю всё по примеру, но первый файл открывается, а второй файл (который...

16
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 14:20 2
Где тут чтение файла? Весь фрагмент покажи.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:24  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <sstream>
#include <bitset>
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    std::ifstream ifs("1.exe", std::ifstream::binary);
    std::ostringstream oss;
    string str;
    unsigned char n;
    while (true)
        {
            ifs.read((char *)&n, 1);
            if (ifs.eof()) break;
            oss << std::bitset<32>(n);
 
            str = oss.str();
 
            cout << str << endl;
 
            oss.str("");
        }
    ifs.close();
    return 0;
}
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 14:25 4
Если у тебя int четырёхбайтный, то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    ifstream ifs("1.exe", std::ifstream::binary);
    ostringstream oss;
    unsigned int n;
    while (true)
        {
            ifs.read((char *)&n, sizeof(int));
            if (ifs.eof()) break;
            oss << std::bitset<32>(n);
 
            str = oss.str();
 
            cout << str << endl;
 
            oss.str("");
        }
    f.close();
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:26  [ТС] 5
Выводит по 1 байту, типа этого:
Код
00000000000000000000000000001111
0
Заблокирован
27.01.2015, 14:26 6
Цитата Сообщение от tdo22 Посмотреть сообщение
по 32 байта,
ты пишешь про байты, а загоняешь в поток биты
Цитата Сообщение от tdo22 Посмотреть сообщение
std::bitset<32>(n);
что конкретно угодно сударь вам?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:27  [ТС] 7
программа вылетает, даже ошибки нету
0
Заблокирован
27.01.2015, 14:28 8
Цитата Сообщение от tdo22 Посмотреть сообщение
Выводит по 1 байту, типа этого:
1 байт = 8 бит всего навсего, тут явно непонимание устройства памяти.
Точнее задачу сформулируй
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 14:28 9
Так может в файле нули просто? Дамп есть?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:29  [ТС] 10
Мне нужно прочитать файл, по 32 бита. И записывать эти 32 бита в переменную типа string

Добавлено через 35 секунд
nmcf, нет, файл не забит нулями. Проверял
0
Заблокирован
27.01.2015, 14:33 11
Цитата Сообщение от tdo22 Посмотреть сообщение
в переменную типа string
std::string ?

Добавлено через 55 секунд
Цитата Сообщение от tdo22 Посмотреть сообщение
Мне нужно прочитать файл, по 32 бита
зачем файл читать порциями по 4 байта (32 бита), когда его можно прочитать целиком ?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:37  [ТС] 12
нужно прочитать файл порциями по 32 бита, попутно записывая этих 32 бита в переменную типа std::string.
И так до конца файла
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 14:43 13
Лучший ответ Сообщение было отмечено tdo22 как решение

Решение

Я же тебе дал рабочий фрагмент. Ещё раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main()
{
    locale::global(locale(""));
 
    std::ifstream ifs("d:\\data.txt", std::ifstream::binary);
    std::ostringstream oss;
    unsigned int n;
    string str;
    int i = 0;
    while (true)
        {
            ifs.read((char *)&n, sizeof(int));
            if (ifs.eof() || i == 10) break;
            oss << std::bitset<32>(n);
 
            str = oss.str();
 
            cout << str << endl;
 
            oss.str("");
            ++i;
        }
 
    ifs.close();
 
    cout << endl;
    system("pause");
    return 0;
}
Миниатюры
Как прочитать файл в бинарном режиме по 32 байта  
1
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:53  [ТС] 14
nmcf, то-есть в Вашем коде считывается 10 раз, первые 32 бита, то-есть по 4 байта, верно ?
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 14:54 15
Это просто ограничитель, мне же не надо всё, только посмотреть.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 15:00  [ТС] 16
мне нужно считывать по 32 байта, то-есть по 256 бит

Добавлено через 58 секунд
Сделал так:
C++
1
2
3
            ifs.read((char *)&n, 32);
            if (ifs.eof() || i == 10) break;
            oss << std::bitset<256>(n);
но считывает далее по 32 бита
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
27.01.2015, 15:27 17
32 байта?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main()
{
    locale::global(locale(""));
 
    std::ifstream ifs("data.txt", std::ifstream::binary);
    std::ostringstream oss;
    unsigned char n;
    string str;
    int i;
 
    while (!ifs.eof())
        {
            std::bitset<256> bs;
 
            for (i = 0; i < 32; ++i)
            {
                ifs.read((char *)&n, sizeof(unsigned char));
                if (ifs.eof()) break;
                bs = (bs << 8) | std::bitset<256>(n);
            }
            bs <<= (32 - i) * 8;
 
            oss << bs;
 
            str = oss.str();
 
            cout << str << endl << endl;
 
            oss.str("");
        }
 
    ifs.close();
 
    cout << endl;
    system("pause");
    return 0;
}
1
27.01.2015, 15:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2015, 15:27
Помогаю со студенческими работами здесь

Запись в бинарный файл в бинарном режиме: будут ли числа записаны в двоичной системе счисления?
Если я записываю случайное четырехзначное число в бинарный файл, открываю его в бинарном режиме, то...

Добавить в программу две функции: для считывания и записи данных в файл в бинарном режиме
Усовершенствовать программу дополнив две функции: для считывания и записи данных в файл в бинарном...

Как прочитать несколько байтов в файле с n-го байта по m-й байт ?
Как прочитать несколько байтов в файле с n-го байта по m-й байт ?

Как прочитать строку до нулевого байта?
Имеется класс для чтения и записи в память процесса. Данный код читает строку указанной длины...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru