Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6

Сформировать в двоичном файле последовательность из N байтов

24.04.2014, 18:32. Показов 2706. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сформировать в двоичном файле последовательность из N байтов следующего вида:
00000001 00000010 00000100 ... после 10000000 цикл замыкается.

Помогите, пожалуйста. Понятия не имею, как это делать.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2014, 18:32
Ответы с готовыми решениями:

Перестановка байтов в двоичном файле
Здравствуйте! Подскажите пожалуйста, как сделать перестановку байтов в двоичном файле?=(

Поиск и замена указанной последовательности байтов на другую последовательность в файле или группе файлов
Прошу , помогите с заданием . Задание Поиск и замена указанного последовательности байтов на другую последовательность в файле или...

Последовательность байтов
Как представить файл ввиде последовательности байтов? Чтобы потом с этой последовательности проводить какие то операции.

21
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 18:46
Цитата Сообщение от Oath24binder Посмотреть сообщение
Сформировать в двоичном файле последовательность из N байтов следующего вида:
00000001 00000010 00000100 ... после 10000000 цикл замыкается.
C++
1
2
for (int i = 1; i < 100000000; i*=10)
    printf("%08d\r\n", i);
Вывод:
Code
1
2
3
4
5
6
7
8
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.04.2014, 18:49
Цитата Сообщение от Oath24binder Посмотреть сообщение
Понятия не имею
Ищем:
Побитовый сдвиг влево <<

Добавлено через 2 минуты
pav1uxa,
Читаем:
Цитата Сообщение от Oath24binder Посмотреть сообщение
последовательность из N байтов
int - это не 1 байт, а 4 (чаще всего)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:02
Цитата Сообщение от IrineK Посмотреть сообщение
int - это не 1 байт, а 4 (чаще всего)
я вывел последовательность из N байтов (8 байт), по 8 бит в каждом. Причем тут тип переменной? Когда вы запишете в бинарный файл число 100 в двоичной (или 4 в шестнадцатиричной) для него это будет один байт - 00000100 в двоичной или 04 в шестнадцатиричной. Просто показал один из примеров вывода, а как из засунуть в бинарный файл это другой разговор. По поводу побитового сдвига тоже самое могу сказать - сдвигать можно и int.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.04.2014, 19:11
Цитата Сообщение от pav1uxa Посмотреть сообщение
я вывел
Цитата Сообщение от pav1uxa Посмотреть сообщение
могу сказать
Советую все же покурить букварь.
Умножайте ваш int на 2.
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
24.04.2014, 19:16  [ТС]
Поискал, всё равно не понял.
Всё же буду рад, если кто-то сделает или же подробно расскажет мне.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:18
Цитата Сообщение от IrineK Посмотреть сообщение
Советую все же покурить букварь.
Умножайте ваш int на 2.
Спасибо, но я не курю. Зачем мне умножать мой int? Я показал вывод, он соответствует требованиям. На выходе имеем 8 байт (по 8 бит) в соответствии с условием.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.04.2014, 19:21
Цитата Сообщение от pav1uxa Посмотреть сообщение
На выходе имеем 8 байт (по 8 бит)
Нет.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:29
Цитата Сообщение от Oath24binder Посмотреть сообщение
Поискал, всё равно не понял.
Всё же буду рад, если кто-то сделает или же подробно расскажет мне.
Надо не искать, а пробовать что-то делать, потом вставлять сюда код и спрашивать почему не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <windows.h>
#include <iostream>
int main() {
    FILE * f;
    f = fopen ("test4.bin", "wb");
    for (int i = 1; i < 256 ; i*=2)
        fputc(i, f);
    fclose (f);
    system("pause");
    return 0;
}
Как пример реализации, если нужен именно бинарный файл.
Цитата Сообщение от IrineK Посмотреть сообщение
Нет.
то есть
Code
1
2
3
4
5
6
7
8
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
По-вашему, это не 8 байт? Или в этих байтах не по 8 бит? Что именно тут не так?
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.04.2014, 19:45
Цитата Сообщение от pav1uxa Посмотреть сообщение
C++
1
for (int i = 1; i < 256 ; i*=2)
Вот на 2 и надо умножать, а не на 10
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
24.04.2014, 19:53
Цитата Сообщение от pav1uxa Посмотреть сообщение
то есть
нет не 8
Цитата Сообщение от pav1uxa Посмотреть сообщение
По-вашему, это не 8 байт? Или в этих байтах не по 8 бит? Что именно тут не так?
вот это
Цитата Сообщение от pav1uxa Посмотреть сообщение
int i = 1;
размер int это 4 байта (в 32 разрядных системах)
не веришь проверь
C++
1
sizeof (int)
размер 1 байт имеет тип char
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.04.2014, 19:59
pav1uxa,
а теперь посмотрите, что у вас получилось именно в файле.

Задача:
Цитата Сообщение от Oath24binder Посмотреть сообщение
00000001 00000010 00000100 ...
идущие подряд.
А что у вас?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 20:25
Цитата Сообщение от ValeryS Посмотреть сообщение
размер int это 4 байта (в 32 разрядных системах)
не веришь проверь
Code
1
2
3
4
5
6
7
8
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
А где Вы в этих 8 строках увидели слово int, простите? Да и потом, в указанном мной примере int используется, однако формирует правильный файл длинной в 8 байт.

Цитата Сообщение от IrineK Посмотреть сообщение
а теперь посмотрите, что у вас получилось именно в файле.
А я и не говорил что там было готовое решение, я просто показал как вывести числа от 00000000 до 00000001. Хотелось чтобы человек сам подумал хоть чуть-чуть...
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
24.04.2014, 21:11
Цитата Сообщение от pav1uxa Посмотреть сообщение
А где Вы в этих 8 строках увидели слово int, простите?
а это что
Цитата Сообщение от pav1uxa Посмотреть сообщение
for (int i = 1; i < 256 ; i*=2)
если хотел показать принцип то писал бы хотя бы так
C++
1
for(unsigned char i=1;i;i*=2)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 21:29
Цитата Сообщение от ValeryS Посмотреть сообщение
если хотел показать принцип то писал бы хотя бы так
Я писал не про это, а про первое мое сообщение. А это не принцип, это я уже готовый код выложил, который в соответствии с заданием создает файл и записывает в него 8 байт от 00000001 до 10000000. И прекрасно работает с int.

Надо наверное заканчивать это, соглашусь с тем что я ошибся, приношу извинения за флуд...
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
24.04.2014, 21:51
Цитата Сообщение от pav1uxa Посмотреть сообщение
который в соответствии с заданием создает файл и записывает в него 8 байт от 00000001 до 10000000. И прекрасно работает с int.
работает благодаря fputc()
Функция fputc() записывает символ ch в текущую позицию потока stream, a затем увеличивает указатель текущей позиции файла. Хотя на практике при объявлении символа ch он всегда имеет тип int, функцией fputc() тип символа преобразуется в unsigned char. Поскольку в момент вызова символьный аргумент преобразуется к целому типу, в качестве аргументов обычно можно использовать и символьные переменные. При использовании целого значения, старший байт попросту отбрасывается.
(выделено мной)
http://cpp.com.ru/shildt_spr_po_c/13/fputc.html
такие неявные преобразования, могут привести к серьезным ошибкам
например записывать будешь 255 а прочтешь -1
Цитата Сообщение от pav1uxa Посмотреть сообщение
это я уже готовый код выложил,
а зачем там #include <iostream>???
для system("pause");?
тогда зачем #include <windows.h>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 22:07
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем там #include <iostream>???
для system("pause");?
тогда зачем #include <windows.h>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
<iostream> не включает никаких system() как я понял. Во-всяком случае у меня error: system() not declared с ним. <windows.h> да, для system(). А <iostream> хз, видимо остался от какого то такого же примера...
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
25.04.2014, 00:07
Лучший ответ Сообщение было отмечено Oath24binder как решение

Решение

Формируем long long, записываем в бинарник, считываем, смотрим long long как шестнадцатиричный, видим, что все байты оформлены по требованию.

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
#include <iostream>
#include <fstream>
 
int main()
{   long long d = 1, res = 0;
    std::ofstream ofs("binary.dat", std::ios::binary);
 
    for (int i = 0 ; i < 8; i++)
    {   d = d << ((7-i)*8 + i);
        res += d;
        d = 1;
    }
    ofs.write ((char*) &res, sizeof (long long));
    ofs.close();
 
    std::ifstream ifs("binary.dat", std::ios::binary);
    ifs.read ((char*) &res, sizeof (long long));
            std::cout << std::hex << res << '\n';
 
    ifs.close();
    
    std :: cin.get();
    return 0;
}
Изображения
 
1
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
25.04.2014, 00:08
В самом бинарнике при этом такая картина. И странно было бы там узреть стройные ряды нулей и единиц.
Изображения
 
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
01.05.2014, 22:22  [ТС]
Вообще не похоже на то, что я просил.
Либо я чего-то не понимаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.05.2014, 22:22
Помогаю со студенческими работами здесь

Поиск в двоичном файле
Есть двоичный файл, в который записана структура из двух элементов. Как можно организовать в нем поиск? Есть ли стандартная функция какая?...

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

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

Последовательность байтов, возвращаемых InternetReadFile
Привет всем. У меня задача извлечь с сайта некоторый текст и отобразить его на мониторе. Я извлекаю текст с помощью этих трех функций: ...

Изменение произвольной структуры в двоичном файле
Доброго времени суток. Испытываю затруднения с записью структуры в двоичный файл в определенное место. Суть такова. Вначале в файл...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru