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

Разбить файл на биты - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. http://www.cyberforum.ru/cpp-beginners/thread443465.html
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. Сума ряда \sum_{k-1}^{n} (ln|k-x|)/{k}^{2} Значение N 20 Начальные данные x=2,4
C++ Составить программу для вычисления функции Составить программу для вычисления функции \begin{cases} & \text{f}_{1}(x) \\ & \text{f}_{2}(x) \end{cases} функция \begin{cases} & \text xtgax \\ & \text {e}^{-ax}cosax \end{cases} http://www.cyberforum.ru/cpp-beginners/thread443463.html
C++ Найти объем, массу и площадь основания цилиндрического слитка
Известны плотность и геометрические размеры (R-радиус основания и h-высота) цилиндрического слитка, полученного в металлургической лаборатории. Найти объем V, массу m и площадь S основания слитка.
C++ WinApi. SetLocaleInfo() и GetLocaleInfo()
Прошу показать пример использования этих функций.
C++ Делаю простенькую программу, что-то не так... http://www.cyberforum.ru/cpp-beginners/thread443429.html
Хочу сделать чтобы сверялось, но что-то не делает вывода строки Printed: Hello, хотя правильный текст получила программа char messagetoget; GetWindowText(getMsg,(LPSTR)messagetoget,255); if(messagetoget == "Hello") cout << "Printed: Hello";
C++ Указатели и Генератор сл.чисел Доброго времени суток, уважаемые мастера C++ :) Мне нужна Ваша помощь по самым азам. Если не трудно, объясните мне, что такое указатели и для чего они нужны, а так же как в С++ указывать генератор случайных чисел в массиве. Я читал литературу, но там написано как-то не очень ясно. Заранее огромное спасибо. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.02.2012, 16:26     Разбить файл на биты
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/////////////////////////////////////////////////////////////////////////////////////////
//Каким образом осуществить разбиение файла на биты, а потом ещё его желательно будет и собрать. 
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <bitset>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void  bytesfile_to_bitsfile
    (
        const T_str&    bytes_filename,
        const T_str&    bits_filename
    )
{
    std::ifstream   ibytes_file     ( bytes_filename    .c_str(),   std::ios::binary    );
    std::ofstream   obits_file      ( bits_filename     .c_str()                        );
 
    char  byte_symb;
    while( ibytes_file.get(byte_symb) )
    {
        obits_file  <<  std::bitset<CHAR_BIT>(byte_symb).to_string();
    }    
}
/////////////////////////////////////////////////////////////////////////////////////////
void  bitsfile_to_bytesfile
    (
        const T_str&    bits_filename,
        const T_str&    bytes_filename        
    )
{
    std::ifstream   ibits_file      ( bits_filename     .c_str(),   std::ios::binary    );
    std::ofstream   obytes_file     ( bytes_filename    .c_str()                        );
 
    char    bit_symb;
    T_str   byte_str;
    while( ibits_file.get(bit_symb) )
    {
        byte_str += bit_symb;
        if( byte_str.size() == CHAR_BIT )
        {
            char  byte_symb     =   char( std::bitset<CHAR_BIT>(byte_str).to_ulong() );
            obytes_file         <<  byte_symb;
            byte_str.clear();
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  files_compare
    (
        const T_str&    L,
        const T_str&    R
    )
{
    std::ifstream   L_file      ( L.c_str(),    std::ios::binary    );
    std::ifstream   R_file      ( R.c_str(),    std::ios::binary    );
 
    std::ostringstream  L_sout;
    L_sout  <<  L_file.rdbuf();
 
    std::ostringstream  R_sout;
    R_sout  <<  R_file.rdbuf();
 
    return  L_sout.str()    ==  R_sout.str();
}
/////////////////////////////////////////////////////////////////////////////////////////
void  random_fill_file
    ( 
        const T_str&    filename,
        int             symbols_total
    )
{
    std::ofstream   ofile( filename.c_str(),     std::ios::binary    );
    const char  char_min    =   std::numeric_limits<char>::min();
    const char  char_max    =   std::numeric_limits<char>::max();
    
    for(int  i = 0; i < symbols_total; ++i)
    {
        char    rand_symb   =   rand() % (char_max - char_min + 1) + char_min;
        
        if( !iscntrl(rand_symb) )
        {
            ofile.put(rand_symb);
        } 
    }
}
///////////////////////////////////////////////////////////////////////////////////////// 
void  print_file( const T_str&  filename )
{
    std::ifstream   ifile( filename.c_str() );
 
    std::cout   <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  filename                
                <<  ":"
                <<  std::endl
                <<  std::endl
                <<  ifile.rdbuf()
                <<  std::endl
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{    
    srand(unsigned(time(0)));
 
    const T_str     bytes_start_filename    =   "bytes_start.txt";
    const T_str     bits_filename           =   "bits.txt";
    const T_str     bytes_finish_filename   =   "bytes_finish.txt";
 
    const int       BYTES_START_FILE_SIZE   =   100;
    random_fill_file
        (
            bytes_start_filename,
            BYTES_START_FILE_SIZE
        );
    
    bytesfile_to_bitsfile
        (
            bytes_start_filename,
            bits_filename
        );
 
    bitsfile_to_bytesfile
        (
            bits_filename,
            bytes_finish_filename
        );
 
    std::cout   <<  (
                        files_compare
                            (
                                bytes_start_filename,
                                bytes_finish_filename
                            )
                            ? bytes_start_filename + " == " + bytes_finish_filename
                            : bytes_start_filename + " != " + bytes_finish_filename
                    )
 
                <<  std::endl;
 
    print_file( bytes_start_filename    );
    print_file( bits_filename           );
    print_file( bytes_finish_filename   );
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru