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

Read and write binary file - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ После отключения компа удалилась последняя версия проекта http://www.cyberforum.ru/cpp-beginners/thread1769346.html
Было экстренное отключение компа. Потом решил посмотреть .cpp файл. Хотя я сохраняю по несколько раз в день, там была только очень старая версия..... При открытии самого проекта вылетело такое окно:
C++ Конструктор переноса при наследовании в шаблонном классе Здравствуйте. Возможно ли как-то реализовать то, что я пытаюсь сделать? template<typename T> class Interface { protected: T *pointer; virtual void move(Interface &&i2) = 0; http://www.cyberforum.ru/cpp-beginners/thread1769319.html
Найти произведение элементов массива, принадлежащих интервалу C++
Ввести одномерный массив А , вывести его. Найти произведение его элементов, принадлежащих интервалу . Значением этого произведения заменить первый и предпоследний элементы массива.
C++ Заменить при выводе массива каждый второй элемент остатком от деления на 10
Как при выводи массива заменить остатком от деления каждый второй элемент на 10. #include <iostream> #include <iterator> using namespace std; int main() { int n,i; int y; int a; // double y;
C++ Заменить первый и предпоследний элементы массива произведением его элементов, принадлежащих интервалу http://www.cyberforum.ru/cpp-beginners/thread1769219.html
Ввести одномерный массив А , вывести его. Найти произведение его элементов, принадлежащих интервалу . Значением этого произведения заменить первый и предпоследний элементы массива.
C++ Atoi для двоичной системы Есть такое? Ну т.е. atoi переводит десятичное число из текста в десятичное число, а мне нужно двоичное... char str = "00000001"; int num = ?; или char str; itoa(1, str, 2); подробнее

Показать сообщение отдельно
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
23.06.2016, 14:34     Read and write binary file
BeginerC, там капризный одновременный ввод/вывод. у меня получилось если всегда устанавливать позицию чтения и записи перед соответствующей операцией
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include <fstream>
#include <iostream>
#include <stdlib.h>
//---------------------------------------------------------------------------
void write(std::ostream &os, bool received, const std::string &message)
{
    int who = 1;
    int to = 2;
    float version = 3;
 
    os.write((char *)&who, sizeof(who));
    os.write((char *)&to, sizeof(to));
    os.write((char *)&version, sizeof(version));
    os.write((char *)&received, sizeof(received));
 
    int messageSize = message.size();
    os.write((char *)&messageSize, sizeof(messageSize));
 
    os.write((char *)message.c_str(), messageSize);
}
bool read(std::istream &is)
{
    int who;
    int to;
    float version;
    bool received;
 
    is.read((char *)&who, sizeof(who));
    is.read((char *)&to, sizeof(to));
    is.read((char *)&version, sizeof(version));
    is.read((char *)&received, sizeof(received));
 
    int messageSize;
    is.read((char *)&messageSize, sizeof(messageSize));
 
    std::string message;
    message.resize(messageSize);
    is.read((char *)message.c_str(), messageSize);
 
    return received;
}
void mod(std::iostream &ios, bool received, int * const pos)
{
    *pos += sizeof(int) + sizeof(int) + sizeof(float);
    ios.seekp(*pos);
    
    ios.write((char *)&received, sizeof(received));
 
    *pos += sizeof(bool);
    ios.seekg(*pos);
 
    int messageSize;
    ios.read((char *)&messageSize, sizeof(messageSize));
 
    *pos += sizeof(int) + messageSize;
}
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    std::ofstream os("c:\\temp\\test.txt", std::ios::binary);
    write(os, true, "q1");
    write(os, false, "q2");
    write(os, true, "q3");
    write(os, false, "q4");
    os.close();
 
    std::fstream ios("c:\\temp\\test.txt", std::ios::in | std::ios::out | std::ios::binary);
    int pos = 0;
    mod(ios, false, &pos);
    mod(ios, false, &pos);
    mod(ios, true, &pos);
    mod(ios, true, &pos);
    ios.close();
 
    std::ifstream is("c:\\temp\\test.txt", std::ios::binary);
    std::cout << read(is) << std::endl;
    std::cout << read(is) << std::endl;
    std::cout << read(is) << std::endl;
    std::cout << read(is) << std::endl;
    is.close();
 
    system("pause");
 
    return 0;
}
//---------------------------------------------------------------------------
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru