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

ofstream & ifstream :: binary read-write struct - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятная ошибка http://www.cyberforum.ru/cpp-beginners/thread334132.html
Нужно считать в вектор пар все числа, отличные от нуля. В паре - первое число - всегда типа int, второе - double. Написал небольшую ф-цию. Но не получается считать. Проблема - в одной строчке.. не понимаю как ее решить. "Debug Assertion failed" - vector subscript out of range. Из файла считываю вот такую последовательность: 1 4 0 2 1 3 6 0 1 5 2 2 3 5 0 А вот мой код: double b; vector...
C++ Посоветуйте книги по C++ Я уже хорошо знаю PHP, но вот решил перейти на C++. Я с другом договорились создавать игры. Я программист он художник. Мне как программисту нужно будет писать игровой движок(пожалуйста не предлагайте покупать\брать бесплатные движки созданые другими программистами). Посоветуйте пожалуйста книги по C++. И скажите могу ли я использовать знания PHP для изучения C++ и если да то как? http://www.cyberforum.ru/cpp-beginners/thread334107.html
интернет магазин (помогите пожайлуста) C++
Смотрите у меня есть интернет магазин, я обновляю базу цен через артикул, но артикул у меня есть только на тот товар который есть в наличии!! как можно загонять товар не через артикул? подскажите способ? Сформулируйте вопрос более осмысленно. Реально работающий в сети магазин? Тогда вопрос - при чём тут С/С++ для начинающих? Разделом точно не ошиблись?
Проблема с cin.getline(); C++
Есть вопрос по поводу использования cin.getline() после cin: cin>> n; char c; cin.getline(c, buf); Почему можно ввести данные только один раз, хотя по идее должны вводиться дважды Не срабатывает, так как я хотел бы, функция cin.getline (), но почему?
C++ Неприятная проблема с массивом строк http://www.cyberforum.ru/cpp-beginners/thread334089.html
Здравствуйте! Пытаюсь записать в массив строк содержимое директории.. Всё содержимое находит, но на выходе весь массив почему-то заполнен именем последней папки директории.. WIN32_FIND_DATAA FindFile; HANDLE hFile; LPSTR szPATH; char* tmpDirs; printf("--------------------------------------------------------------------------------"); char s="\\*.*"; strcat(main_dir,s);
C++ Извлечь элемент из вектора Пожалуйста, помогите разобраться. Это функция разбивки строки на лексемы, и копирования результатов разбивки в вектор. void Tokenize(const string& str, vektor<string>&tk, const string& delimiters = "") { string::size_type lastPos =0; lastPos = str.find_first_not_of(delimiters); while (lastPos != string::npos ) { подробнее

Показать сообщение отдельно
goto
 Аватар для goto
76 / 34 / 4
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
18.07.2011, 16:22     ofstream & ifstream :: binary read-write struct
Не пойму в чем дело... но я не могу считать всю структуру FNTBINARY из файла, файл - это она и есть в бинарном виде, одна структура FNTBINARY. Размер структуры 72412, файл на диске весит 72440 откуда, берутся 8 байт? Формат записи-чтения установлен бинарный. Читается только часть, до chars[32]... дальше мусор. Проверял, что пишется структура полностью адекватная перед записью, содержит нормальные данные... запиcь производиться так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool CFnt :: SaveBinary(char * bin_fnt_file_name) 
{
    std::ofstream out_bin_fnt_file( bin_fnt_file_name, std::ios::out || std::ios::binary );
 
    if (!out_bin_fnt_file.is_open()) return false;
 
    std::streamsize buffsize = sizeof (FNTBINARY);
    FNTBINARY t;
    memcpy(&t, &fb, buffsize);
    
    out_bin_fnt_file.write((char*) &t, buffsize );
 
    out_bin_fnt_file.flush();
    out_bin_fnt_file.close();
    return true;
}

Сама струкрура
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
#pragma pack(push)
#pragma pack(1)
typedef struct FNTCHAR 
{
    short id;           // Код символа 
    short x;            // х текстурная координата
    short y;            // у текструная координата
    short w;            // ширина буквы
    short h;            // высота
    short xoff;     // сдвиг по х
    short yoff;     // сдвиг по у
    short xadvance; // 
    unsigned char page;
    unsigned char chnl;
 
} FNTCHAR, *PFNTCHAR;
 
typedef struct FNTBINARY 
{
    short chars_size;           // Размер букв
    short base;             // Размер самой большой буквы (для вертикального переноса строки)
    char font_name[64];     // Имя шрифта
    char texture_name[64];  // Файл текстуры
    struct FNTCHAR chars[260];      // Метрики букв
    char kerning[260][260]; // Кернинг букв
} FNTBINARY;
#pragma pack(pop)
Загрузка...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool CFnt :: LoadBinary(char * bin_fnt_file_name)
{
    
    std::ifstream in_bin_fnt_file( bin_fnt_file_name, std::ios::in || std::ios::binary );
    
    if (!in_bin_fnt_file.is_open()) return false;
    std::streamsize buffsize = sizeof (FNTBINARY);
    FNTBINARY t;
 
    in_bin_fnt_file.read( (char*) &t, buffsize);
    memcpy(&fb, &t, buffsize);
    in_bin_fnt_file.close();
    return true;
}
Класс со структурой fb (font binary)
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CFnt 
{
public:
    struct FNTBINARY fb;
 
    bool CompileMetricFile ( char * fnt_file_name );
    bool SaveBinary ( char * bin_fnt_file_name );
    bool LoadBinary ( char * bin_fnt_file_name );
 
    CFnt(); 
    ~CFnt();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru