Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Alexey_SI
0 / 0 / 0
Регистрация: 09.06.2015
Сообщений: 3
#1

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

09.06.2015, 19:31. Просмотров 152. Ответов 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 минут
http://www.cyberforum.ru/cpp-beginners/thread120131.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2015, 19:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с двоичным файлом (C++):

Работа с двоичным файлом: Перевести содержание файла в поток байт
Существует файл D:\proba.txt в себе он содержит: 68 11 00 00 00 00 71 00 00 00...

работа с двоичным кодом
Задача не сложная но материала на ту тему Я на просторах интернета так и не...

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

Работа с файлом
char *FileName =&quot;123.txt&quot;; int h=fileno(fopen(FileName,&quot;r+&quot;)); FileName=&quot;\0&quot;;...

Работа с файлом
Здравствуйте, уважаемые программисты! Есть такая задача: Заданы слова....

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

Работа с файлом
Поясню: записываю файл из двумерного целочисленного вектора вот такой строкой:...

Работа с файлом
Помогите пожалуйста. Надо подсчитать в файле количество букв &quot;A&quot; и записать это...

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

Работа с файлом
Всем здравствуйте! У меня вопрос по поводу реализации программы с файлом,...


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

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

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