Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Работа с двоичным файлом - C++

09.06.2015, 19:31. Просмотров 148. Ответов 0
Метки нет (Все метки)

Фомирование из входного двоичного файла “cm.dat” сортированоой коллекции структур с двумя полями (char[8],short), упорялоченный по второму полю.
Структура cm.dat:
Двоичный файл “cm.dat” содержит 2 части:
- первая часть содержит количество параметров – 2 байта и список элементов структур (имя параметра – 8 байт, номер параметра – 2 байта, ссылка на тексты данного параметра – 2 байта);
- вторая часть файла содержит тексты параметров.
Нас интересует только информация первой части. Необходимо учесть, что числовые значения представлены в прямом коде.

Во-первых,после записи в структуру имя параметра отображается неправильно(то есть если сразу выводить имя параметра,то оно отображается верно). Во-вторых номер параметра отображается неправильно. Хотя,когда считываю первые 2 байта с количеством параметров,то количество верное.

Вот программа:
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
#pragma once
 
#include <fstream>
#include "objects.h"
#include <iostream>
#include "string.h"
#include "conio.h"
#include <sstream>
#include <string>
#include <cstdint>
 
using namespace std;
 
struct cm
    {
        char* a;
        unsigned short b;
    };
 
class MyCollection :
    public sortedCollection
{
public:
MyCollection(cc_Index limit, cc_Index delta) : sortedCollection(limit, delta) {
 
 
            duplicates = True;
 
        }
        virtual void *keyOf( void *item )
        {
            return &(((cm*)item)->b);
        }
 
        virtual int compare (void *k1, void *k2 )
            {
                return *((unsigned short*)k1) - *((unsigned short*)k2);
                
            } 
 
            
        
        void print(ofstream& f1){
            f1<<"Q="<<count<<endl;
            cm* dat;
            for( int i = 0; i < count; i++ ){
                dat = (cm *)at(i);
                f1   << dat->a << " " << dat->b << endl;
            }
            f1.close();
        }
 
};
 
 
void main()
{
    char buf[8]; 
    unsigned short count;
    ofstream f1("cm.txt");
    ifstream file("CM.dat",ios::binary);
    if (!file)
    {
        cout<<"error"<<endl;
    }
    else
    {
        cout<<"OK"<<endl;
    }
    MyCollection msc(4,2);
    file.read(buf,2);
    count = (buf[0]<<8) | (buf[1]);
    cout<<count<<endl;
    _getch();   
    for (int i = 0; i < count ; i++)
    {
        cm* dat = new cm();
        file.read(buf,8);
        for (int j = 0; j < 8; j++)
        {
            if (buf[j] == ' ')
            buf[j] = 0;
            
        }
        dat->a = new char[9];
        strcpy(dat->a,buf);
        file.read(buf,2);
        unsigned short a;
        a = (buf[0]<<8) | (buf[1]);
        dat->b = a;
        file.read(buf,2);   
        msc.insert(dat);
    }
    
 
    file.close();
    msc.print(f1);
    
     _getch();
 
}
Добавлено через 1 час 13 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2015, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с двоичным файлом (C++):

Работа с двоичным файлом - C++
Ребят помогите. Создать двоичный файл и записать в него степени числа 3. Вывести на экран компоненты файла с четным порядковым номером....

Работа с двоичным файлом: Перевести содержание файла в поток байт - C++
Существует файл D:\proba.txt в себе он содержит: 68 11 00 00 00 00 71 00 00 00 09 01 C8 01 00 00 01... Он довольно таки длинный до 253...

работа с двоичным кодом - C++
Задача не сложная но материала на ту тему Я на просторах интернета так и не нашел( Через небольшую программку (самопальный HEX ридер) Я...

If работа с файлом - C++
Часть кода в которой я записываю строки в файл,по параметрам которые совпадают,как записать те строки в которых нет совпадение? как...

Работа с файлом - C++
Помогите если не затруднит. Есть текстовый файл(примерно такой): A asdada qweqw A ijiijij nvbjk rtrt A

Работа с файлом - C++
Добрый вечер. Нужно подсчитать количество точек, попадающих в круг радиуса 4 с центром в начале координат. На паскале такую прогу уже делал...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2015, 19:31
Привет! Вот еще темы с ответами:

Работа с файлом - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct STUDENT // структура STUDENT { string name; ...

Работа с файлом - C++
Имеется текст документа, состоящий из нескольких параграфов. Каждый параграф начинается с заголовка и отделен пустой строкой от предыдущего...

Работа с файлом - C++
В двумерном массиве подсчитать сумму элементов в каждом столбце и вывести ответы в файл! Пример 1 2 3 4 5 6 7 8 9 в файл...

Работа с файлом - C++
Добрый вечер форумчане. Прошу помочь мне в написание программы. Речь идет о простой последовательности. Количество чисел, равных...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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