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

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

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

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

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

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

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

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

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

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

Добавлено через 2 минуты
pav1uxa,
Читаем:
Цитата Сообщение от Oath24binder Посмотреть сообщение
последовательность из N байтов
int - это не 1 байт, а 4 (чаще всего)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:02 4
Цитата Сообщение от IrineK Посмотреть сообщение
int - это не 1 байт, а 4 (чаще всего)
я вывел последовательность из N байтов (8 байт), по 8 бит в каждом. Причем тут тип переменной? Когда вы запишете в бинарный файл число 100 в двоичной (или 4 в шестнадцатиричной) для него это будет один байт - 00000100 в двоичной или 04 в шестнадцатиричной. Просто показал один из примеров вывода, а как из засунуть в бинарный файл это другой разговор. По поводу побитового сдвига тоже самое могу сказать - сдвигать можно и int.
0
Заблокирован
24.04.2014, 19:11 5
Цитата Сообщение от pav1uxa Посмотреть сообщение
я вывел
Цитата Сообщение от pav1uxa Посмотреть сообщение
могу сказать
Советую все же покурить букварь.
Умножайте ваш int на 2.
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
24.04.2014, 19:16  [ТС] 6
Поискал, всё равно не понял.
Всё же буду рад, если кто-то сделает или же подробно расскажет мне.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:18 7
Цитата Сообщение от IrineK Посмотреть сообщение
Советую все же покурить букварь.
Умножайте ваш int на 2.
Спасибо, но я не курю. Зачем мне умножать мой int? Я показал вывод, он соответствует требованиям. На выходе имеем 8 байт (по 8 бит) в соответствии с условием.
0
Заблокирован
24.04.2014, 19:21 8
Цитата Сообщение от pav1uxa Посмотреть сообщение
На выходе имеем 8 байт (по 8 бит)
Нет.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 19:29 9
Цитата Сообщение от 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 Посмотреть сообщение
Нет.
то есть
Код
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
По-вашему, это не 8 байт? Или в этих байтах не по 8 бит? Что именно тут не так?
0
Заблокирован
24.04.2014, 19:45 10
Цитата Сообщение от pav1uxa Посмотреть сообщение
C++
1
for (int i = 1; i < 256 ; i*=2)
Вот на 2 и надо умножать, а не на 10
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
24.04.2014, 19:53 11
Цитата Сообщение от pav1uxa Посмотреть сообщение
то есть
нет не 8
Цитата Сообщение от pav1uxa Посмотреть сообщение
По-вашему, это не 8 байт? Или в этих байтах не по 8 бит? Что именно тут не так?
вот это
Цитата Сообщение от pav1uxa Посмотреть сообщение
int i = 1;
размер int это 4 байта (в 32 разрядных системах)
не веришь проверь
C++
1
sizeof (int)
размер 1 байт имеет тип char
0
Заблокирован
24.04.2014, 19:59 12
pav1uxa,
а теперь посмотрите, что у вас получилось именно в файле.

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

Цитата Сообщение от IrineK Посмотреть сообщение
а теперь посмотрите, что у вас получилось именно в файле.
А я и не говорил что там было готовое решение, я просто показал как вывести числа от 00000000 до 00000001. Хотелось чтобы человек сам подумал хоть чуть-чуть...
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
24.04.2014, 21:11 14
Цитата Сообщение от 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 15
Цитата Сообщение от ValeryS Посмотреть сообщение
если хотел показать принцип то писал бы хотя бы так
Я писал не про это, а про первое мое сообщение. А это не принцип, это я уже готовый код выложил, который в соответствии с заданием создает файл и записывает в него 8 байт от 00000001 до 10000000. И прекрасно работает с int.

Надо наверное заканчивать это, соглашусь с тем что я ошибся, приношу извинения за флуд...
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
24.04.2014, 21:51 16
Цитата Сообщение от 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 17
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем там #include <iostream>???
для system("pause");?
тогда зачем #include <windows.h>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
<iostream> не включает никаких system() как я понял. Во-всяком случае у меня error: system() not declared с ним. <windows.h> да, для system(). А <iostream> хз, видимо остался от какого то такого же примера...
0
Заблокирован
25.04.2014, 00:07 18
Лучший ответ Сообщение было отмечено 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
Заблокирован
25.04.2014, 00:08 19
В самом бинарнике при этом такая картина. И странно было бы там узреть стройные ряды нулей и единиц.
Изображения
 
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
01.05.2014, 22:22  [ТС] 20
Вообще не похоже на то, что я просил.
Либо я чего-то не понимаю.
0
01.05.2014, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2014, 22:22
Помогаю со студенческими работами здесь

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

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

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

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


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

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