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

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

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

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

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

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

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

16
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 14:20
Где тут чтение файла? Весь фрагмент покажи.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:24  [ТС]
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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 14:25
Если у тебя 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  [ТС]
Выводит по 1 байту, типа этого:
Code
1
00000000000000000000000000001111
0
Заблокирован
27.01.2015, 14:26
Цитата Сообщение от tdo22 Посмотреть сообщение
по 32 байта,
ты пишешь про байты, а загоняешь в поток биты
Цитата Сообщение от tdo22 Посмотреть сообщение
std::bitset<32>(n);
что конкретно угодно сударь вам?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:27  [ТС]
программа вылетает, даже ошибки нету
0
Заблокирован
27.01.2015, 14:28
Цитата Сообщение от tdo22 Посмотреть сообщение
Выводит по 1 байту, типа этого:
1 байт = 8 бит всего навсего, тут явно непонимание устройства памяти.
Точнее задачу сформулируй
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 14:28
Так может в файле нули просто? Дамп есть?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:29  [ТС]
Мне нужно прочитать файл, по 32 бита. И записывать эти 32 бита в переменную типа string

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

Добавлено через 55 секунд
Цитата Сообщение от tdo22 Посмотреть сообщение
Мне нужно прочитать файл, по 32 бита
зачем файл читать порциями по 4 байта (32 бита), когда его можно прочитать целиком ?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 14:37  [ТС]
нужно прочитать файл порциями по 32 бита, попутно записывая этих 32 бита в переменную типа std::string.
И так до конца файла
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 14:43
Лучший ответ Сообщение было отмечено 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  [ТС]
nmcf, то-есть в Вашем коде считывается 10 раз, первые 32 бита, то-есть по 4 байта, верно ?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 14:54
Это просто ограничитель, мне же не надо всё, только посмотреть.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
27.01.2015, 15:00  [ТС]
мне нужно считывать по 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.01.2015, 15:27
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2015, 15:27
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru