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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
#1

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

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

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

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

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

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

Замена байтов в файле - C++
Есть программа написанная на MFC, вопрос как можно реализовать смену байтов в файле который она открывает если я знаю офсеты 0x000C92AE и...

Изменение порядка байтов в файле - C++
Добрый вечер! Проблема такая: необходимо составить программу, изменяющую порядок байтов в файле на реверсный(последний байт становится...

Собрать int из четырех байтов в файле - C++
Есть файл, данные сохранены последовательно, в основном чары иногда есть 4 байтовые числа, не могу прочитать эти числа в переменную,...

ФТП up\down зависает на 1м файле на 0 байтов у некоторых - C++
такая проблема, у некоторых юзеров фтп upload виснет на 0 байтов, только создается на сервер первый передаваемый файл с нулевым размером и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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>???
принцип "Бритва Оккама " -"не плодите сущности, без необходимости"
pav1uxa
1788 / 1628 / 622
Регистрация: 23.01.2014
Сообщений: 5,909
Завершенные тесты: 1
24.04.2014, 22:07 #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 #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 #19
В самом бинарнике при этом такая картина. И странно было бы там узреть стройные ряды нулей и единиц.
Изображения
 
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
01.05.2014, 22:22  [ТС] #20
Вообще не похоже на то, что я просил.
Либо я чего-то не понимаю.
IrineK
Заблокирован
01.05.2014, 22:28 #21
0х01 = 00000001
0х02 = 00000010
0х04 = 00000100
0х08 = 00001000
0х10 = 00010000
0х20 = 00100000
0х40 = 01000000
0х80 = 10000000

Вопросы?
Oath24binder
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 6
01.05.2014, 23:11  [ТС] #22
Вот теперь понятно, спасибо!

Добавлено через 39 минут
Последний вопрос:
d = d << ((7-i)*8 + i);
Почему именно так? Какая логика?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 23:11
Привет! Вот еще темы с ответами:

В двоичном файле удалить число, записанное после первого нуля - C++
1. В двоичном файле, элементами которого являются целые числа. Удалить из него число, записанное после первого нуля. Результат записать в...

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

В заданном двоичном файле с целыми числами заменить нулями все чётные элементы - C++
Дан двоичный файл с целыми числами. Все его четные элементы заменить нулями. Рассмотреть 2 варианта: − исходный файл содержит 13 чисел;...

Вводится последовательность из N целых чисел. Сформировать последовательность, - C++
Вводится последовательность из N целых чисел. Сформировать последовательность, каждый элемент которой равен сумме цифр исходной...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2014, 23:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru