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

Как считывать информация с файла по байтам - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Обработка векторов в неразветвленном цикле http://www.cyberforum.ru/cpp-beginners/thread671408.html
Помогите пожалуйста решить задачку... Задание. Составить и испытать циклическую программу для получения результата, указанного в заданном варианте задания. Всюду далее набор индексированных значений, например X1, X2, X3, … , Xn, называется вектором. Для испытания программы подберите удобные значения n, и значения элементов векторов X 7. Вектор T такой, что Tk = k Xk ; k = 1, 2, 3, … , n....
C++ [C++, OpenGL, glut] передача метода класса в качестве параметра функции glutDisplayFunc() Пишу программу для обхода бинаронго дерева поиска. Программа написана и кажется даже работает, но только в консоли. Решил выводить дерево на экран, для наглядности, используя OpenGL (как раз его в это время начал изучать). Но тут появилась проблема, оказывается нельзя передать метод класса как параметр функции glutDisplayFunc(); Пытался что-то найти в интернете, но большого успеха этого не... http://www.cyberforum.ru/cpp-beginners/thread671402.html
C++ Сжать массив путём удаления нулей
Нужно написать программу которая сжимает массив путём удаления нулей (если они есть), не используя вспомагательный массив. Буду очень благодарен!!!!!
Есть ли аналог isalpha, только для string C++
Добрый вечер! Как проверить, что введены только буквы, без символов, isalpha не прокатило:curtsy: , тока для символов cout<<"enter a word:"<<endl; cin>>word; while (true) { if(isalpha(word)) { cout<<"You entered: "<<word<<endl<<endl; break;
C++ Первый класс. Функция-член http://www.cyberforum.ru/cpp-beginners/thread671384.html
Добрый день! Пытаюсь собрать свой первый класс, но, кажется, не до конца понимаю всей сути. #include <stdio.h> #include <iostream> #include <string> #include <conio.h> #include <fstream> using namespace std;
C++ Массивы и циклы Суть задачи: Двумерный массив, содержащий равное число строк и столбцов, называется магическим квадратом, если суммы чисел, записанных в каждой строке, каждом столбце и каждой из двух больших диагоналей, равны одному и тому же числу. Определить, является ли данный массив А из N строк и N столбцов магическим квадратом. Как бЭ если задать строго что массив трехмерный допустим, все легко и... подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2012, 14:21     Как считывать информация с файла по байтам
Вот этот код делает то же самое, что и код, с которым вы пытаетесь разобраться. Помощи, я так понял, вам не дождаться. Очень трудно разобраться, если вопрос туманный. Файл, который этот код корректно обрабатыает, я прилагаю для проверки. От вашего (выложенного) он отличается тем, что убран символ '|' из части с данными.
Код
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
// Запись в массив векторов данных из файла, с преобразованием из шестнадцатиричной системы 
// в десятичную. В каждый вектор записываются данные, начиная со слова 0x80 и до следующего слова 0x80
// Файл должен быть такого формата:
//....
// 00000001C0:     20  32  30  2E  32  30  20  AA  83  E6  0A  0A  00  00  00  00       
// 00000001D0:     80  01  00  01  00  27  00  02  00  66  00  C0  00  87  00  CA   
// 00000001E0:     00  6E  00  CB  00  6E  00  EF  00  67  01  05  00  88  01  2F       
// ....
// Количество пробелов не важно, но других символов, в части с данными, не должно быть, или тогда
// нужно делать дополнительную проверку.
 
#include<iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
 
void f1(istream &f, int &flag) // функция проверяет равно ли следующее слово 0x80. Если да то flag = 0;
{
    char ch, ch1;
    while (f.get() == ' '); // читаем до символа
    f.seekg(-1, ios::cur); // возврат курсора на начало строки с данными
    // проверяем следующие два символа
    ch = f.peek();
    f.seekg(1, ios::cur);
    ch1 = f.peek();
            
    if (ch == '8' && ch1 == '0') flag = 0; // если следующие два символа 8 и 0 , то обнуляем flag
    f.seekg(-1, ios::cur); // возврат курсора после проверки
}
 
int main()
{
ifstream f("file2.txt", ios::binary);
 
stringstream s;
string str1;
string str2;
string str;
 
int c = 0; // счётчик для слова 0x80
char ch, ch1;
 
while (!f.eof()) // подсчёт количества слов 0x80 в файле
{
    while (f.get(ch)) // пропускаем до ':'
        if (ch == ':') break;
    
    for (int i = 0; i < 8; i++) // читаем 8 пар строк
    {
        f >> str1 >> str2;
        if (str1 == "80")  c++; // если найдено слово 0x80
    }
}
 
f.clear();
f.seekg(0, ios::beg); // курсор в начало
 
vector <int> *p = new vector <int>[c]; // динамический массив векторов
 
int i = -1; // индекс массива векторов
int flag = 0;
 
while (!f.eof())
{
    while (f.get(ch)) // читаем до ':'
        if (ch == ':') break;
 
    f1(f, flag);
    
    for (int j = 0; j < 8; j++) // читаем 8 слов
    {
        f >> str1 >> str2;
        if (str1 == "80" && flag == 0) // если первое слово 0x80 и flag = 0
        {
            str1 = "00"; // 0x80 заменяем на 00
            flag = 1; 
            i++; 
        }
        if (flag == 1)
        {
            str = str1 + str2; // создаём слово
            int a = 0;
            s << hex << str; // помещаем слово как число в hex виде в поток
            s >> a; // извлекаем десятичное число
            s.clear();
            
            p[i].push_back(a); // помещаем число в вектор
            
            f1(f, flag);
        }
    }
}
 
for (int i = 0; i < c; i++) // вывод размера и содержимого векторов
{
    cout << "vector " << i << "(size = " << p[i].size() << "):" << endl << endl;
    for (int j = 0; j < p[i].size(); j++)
    {
         cout << p[i][j] << " ";
    }
    cout << endl << endl;
}
 
f.close();
 
delete [] p;
 
system("pause");
return 0;
}
Вложения
Тип файла: txt file2.txt (4.2 Кб, 3 просмотров)
 
Текущее время: 10:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru