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

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

Восстановить пароль Регистрация
 
 
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
24.04.2014, 18:32     Сформировать в двоичном файле последовательность из N байтов #1
Сформировать в двоичном файле последовательность из N байтов следующего вида:
00000001 00000010 00000100 ... после 10000000 цикл замыкается.

Помогите, пожалуйста. Понятия не имею, как это делать.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 18:32     Сформировать в двоичном файле последовательность из N байтов
Посмотрите здесь:

ФТП up\down зависает на 1м файле на 0 байтов у некоторых C++
C++ C++ Изменение порядка байтов в файле
Как прочитать несколько байтов в файле с n-го байта по m-й байт ? C++
C++ Поиск в двоичном файле
Собрать int из четырех байтов в файле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 18:46     Сформировать в двоичном файле последовательность из N байтов #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
IrineK
Заблокирован
24.04.2014, 18:49     Сформировать в двоичном файле последовательность из N байтов #3
Цитата Сообщение от Oath24binder Посмотреть сообщение
Понятия не имею
Ищем:
Побитовый сдвиг влево <<

Добавлено через 2 минуты
pav1uxa,
Читаем:
Цитата Сообщение от Oath24binder Посмотреть сообщение
последовательность из N байтов
int - это не 1 байт, а 4 (чаще всего)
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 19:02     Сформировать в двоичном файле последовательность из N байтов #4
Цитата Сообщение от IrineK Посмотреть сообщение
int - это не 1 байт, а 4 (чаще всего)
я вывел последовательность из N байтов (8 байт), по 8 бит в каждом. Причем тут тип переменной? Когда вы запишете в бинарный файл число 100 в двоичной (или 4 в шестнадцатиричной) для него это будет один байт - 00000100 в двоичной или 04 в шестнадцатиричной. Просто показал один из примеров вывода, а как из засунуть в бинарный файл это другой разговор. По поводу побитового сдвига тоже самое могу сказать - сдвигать можно и int.
IrineK
Заблокирован
24.04.2014, 19:11     Сформировать в двоичном файле последовательность из N байтов #5
Цитата Сообщение от pav1uxa Посмотреть сообщение
я вывел
Цитата Сообщение от pav1uxa Посмотреть сообщение
могу сказать
Советую все же покурить букварь.
Умножайте ваш int на 2.
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
24.04.2014, 19:16  [ТС]     Сформировать в двоичном файле последовательность из N байтов #6
Поискал, всё равно не понял.
Всё же буду рад, если кто-то сделает или же подробно расскажет мне.
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 19:18     Сформировать в двоичном файле последовательность из N байтов #7
Цитата Сообщение от IrineK Посмотреть сообщение
Советую все же покурить букварь.
Умножайте ваш int на 2.
Спасибо, но я не курю. Зачем мне умножать мой int? Я показал вывод, он соответствует требованиям. На выходе имеем 8 байт (по 8 бит) в соответствии с условием.
IrineK
Заблокирован
24.04.2014, 19:21     Сформировать в двоичном файле последовательность из N байтов #8
Цитата Сообщение от pav1uxa Посмотреть сообщение
На выходе имеем 8 байт (по 8 бит)
Нет.
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 19:29     Сформировать в двоичном файле последовательность из N байтов #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 бит? Что именно тут не так?
IrineK
Заблокирован
24.04.2014, 19:45     Сформировать в двоичном файле последовательность из N байтов #10
Цитата Сообщение от pav1uxa Посмотреть сообщение
C++
1
for (int i = 1; i < 256 ; i*=2)
Вот на 2 и надо умножать, а не на 10
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
24.04.2014, 19:53     Сформировать в двоичном файле последовательность из N байтов #11
Цитата Сообщение от pav1uxa Посмотреть сообщение
то есть
нет не 8
Цитата Сообщение от pav1uxa Посмотреть сообщение
По-вашему, это не 8 байт? Или в этих байтах не по 8 бит? Что именно тут не так?
вот это
Цитата Сообщение от pav1uxa Посмотреть сообщение
int i = 1;
размер int это 4 байта (в 32 разрядных системах)
не веришь проверь
C++
1
sizeof (int)
размер 1 байт имеет тип char
IrineK
Заблокирован
24.04.2014, 19:59     Сформировать в двоичном файле последовательность из N байтов #12
pav1uxa,
а теперь посмотрите, что у вас получилось именно в файле.

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

Цитата Сообщение от IrineK Посмотреть сообщение
а теперь посмотрите, что у вас получилось именно в файле.
А я и не говорил что там было готовое решение, я просто показал как вывести числа от 00000000 до 00000001. Хотелось чтобы человек сам подумал хоть чуть-чуть...
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
24.04.2014, 21:11     Сформировать в двоичном файле последовательность из N байтов #14
Цитата Сообщение от pav1uxa Посмотреть сообщение
А где Вы в этих 8 строках увидели слово int, простите?
а это что
Цитата Сообщение от pav1uxa Посмотреть сообщение
for (int i = 1; i < 256 ; i*=2)
если хотел показать принцип то писал бы хотя бы так
C++
1
for(unsigned char i=1;i;i*=2)
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 21:29     Сформировать в двоичном файле последовательность из N байтов #15
Цитата Сообщение от ValeryS Посмотреть сообщение
если хотел показать принцип то писал бы хотя бы так
Я писал не про это, а про первое мое сообщение. А это не принцип, это я уже готовый код выложил, который в соответствии с заданием создает файл и записывает в него 8 байт от 00000001 до 10000000. И прекрасно работает с int.

Надо наверное заканчивать это, соглашусь с тем что я ошибся, приношу извинения за флуд...
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
24.04.2014, 21:51     Сформировать в двоичном файле последовательность из N байтов #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>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,596
Завершенные тесты: 1
24.04.2014, 22:07     Сформировать в двоичном файле последовательность из N байтов #17
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем там #include <iostream>???
для system("pause");?
тогда зачем #include <windows.h>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
<iostream> не включает никаких system() как я понял. Во-всяком случае у меня error: system() not declared с ним. <windows.h> да, для system(). А <iostream> хз, видимо остался от какого то такого же примера...
IrineK
Заблокирован
25.04.2014, 00:07     Сформировать в двоичном файле последовательность из N байтов #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Формируем 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;
}
Изображения
 
IrineK
Заблокирован
25.04.2014, 00:08     Сформировать в двоичном файле последовательность из N байтов #19
В самом бинарнике при этом такая картина. И странно было бы там узреть стройные ряды нулей и единиц.
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 22:22     Сформировать в двоичном файле последовательность из N байтов
Еще ссылки по теме:

C++ Замена байтов в файле
Перестановка байтов в двоичном файле C++
C++ В двоичном файле удалить число, записанное после первого нуля

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

Или воспользуйтесь поиском по форуму:
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
01.05.2014, 22:22  [ТС]     Сформировать в двоичном файле последовательность из N байтов #20
Вообще не похоже на то, что я просил.
Либо я чего-то не понимаю.
Yandex
Объявления
01.05.2014, 22:22     Сформировать в двоичном файле последовательность из N байтов
Ответ Создать тему
Опции темы

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