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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
mdj
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 4
#1

Как записать битсет в файл? - C++

24.08.2009, 15:48. Просмотров 1632. Ответов 5
Метки нет (Все метки)

Как записать битсет в файл ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2009, 15:48     Как записать битсет в файл?
Посмотрите здесь:

C++ Как записать динамический массив в файл
C++ Как записать структуру в файл?
Как записать в файл FileWrite(...) ? C++
C++ Как записать картинку в файл
C++ создать файл 1.part и записать в него первые x элементов массива. После чего, создать второй файл 2.part, куда записать оставшиеся в массиве элементы.
C++ Как записать в файл класс?
C++ Как записать string в файл?
Как записать результат в файл C++
Как записать в файл данные? C++
C++ Как записать класс в файл?
C++ Как записать вектор в файл?
C++ Как считать и записать в файл?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
24.08.2009, 16:43     Как записать битсет в файл? #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
#include <stdio.h>
 
/* Запись и чтение битовых полей */
    
/* типа таймер на три часа с минутами */
struct timer3h {
    unsigned int hours : 2;
    unsigned int minutes : 6;
};
 
int main() {
    char *file_name = "test.bin"; /* имя тестового файла */
    FILE *testfile;
    struct timer3h tw, tr;
    tw.hours = 2;
    tw.minutes = 35;
    printf("Befor writing to file: %d:%02d\n", tw.hours, tw.minutes);
    /* запись в файл */
    if( (testfile = fopen(file_name, "wb")) == NULL ){
        printf("Can't open file %s for writing!\n", file_name);
        return(1);
    }
    if ( fwrite(&tw, sizeof(struct timer3h), 1, testfile) != 1 ){
        printf("Can't write to file %s\n", file_name);
        return(1);
    }
    fclose(testfile);
    
    /* читаем, что записали */
    if ( (testfile = fopen(file_name, "rb")) == NULL ){
        printf("Can't open file %s for reading!\n", file_name);
        return(1);
    }
    if ( fread(&tr, sizeof(struct timer3h), 1, testfile) != 1 ){
        printf("Can't read from file %s\n", file_name);
        return(1);
    }
    fclose(testfile);
    printf("After reading from file: %d:%02d\n", tr.hours, tr.minutes);
    
    return(0);
}
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
24.08.2009, 16:51     Как записать битсет в файл? #3
Цитата Сообщение от mdj Посмотреть сообщение
Как записать битсет в файл?
хм..
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
#include <bitset>
 
 
int main(){
    std::bitset<4> b;
    std::ofstream file("file.txt");
    file << b;
    file.close();
    return 0;
}
mdj
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 4
24.08.2009, 17:09  [ТС]     Как записать битсет в файл? #4
Цитата Сообщение от ISergey Посмотреть сообщение
хм..
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
#include <bitset>
 
 
int main(){
    std::bitset<4> b;
    std::ofstream file("file.txt");
    file << b;
    file.close();
    return 0;
}
Пробовал, получается что записывает он не биты, а символы. Т.е. здесь file.txt будет 4 байта. А мне нужно записать непосредственно биты.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
24.08.2009, 17:20     Как записать битсет в файл? #5
Биты отдельно писать не получится, надо
- либо привести поле к чему-то типа int или char, и записывать новый тип.
- либо, если хотите получить что-то читабельное, соответственно сделать более глубокое преобразование - биты преобразовывать в символы 0/1 и складывать, например, в строку символов.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
25.08.2009, 04:21     Как записать битсет в файл? #6
Цитата Сообщение от mdj Посмотреть сообщение
Пробовал, получается что записывает он не биты, а символы. Т.е. здесь file.txt будет 4 байта. А мне нужно записать непосредственно биты.
Могу ошибаться, но на сколько знаю, структуры (не важно, объявленные, как struct, или std::bitset - по сути примерно то же самое) выравниваются по границе слова. Файл, который пишет моя програмка, тоже состоит из 4 байт:
Код
$ hexdump test.bin 
0000000 008e 0000
Причём странную особенность заметил: собранная компилятором gcc для cygwin (версию на работе посмотрю, сейчас не помню, но ставил года два назад...) первым байтом пишет 8e, а дальше нули. А gcc 4.3.2 под debian пишет три байта мусора. Пришлось ещё <string.h> добавить и две строки:
C
1
2
bzero((void *)&tw, sizeof(struct timer3h));
bzero((void *)&tr, sizeof(struct timer3h));
Короче, попробуйте битовые поля по границе слова выравнивать (4 байта для 32 битных систем, для 64 битных видимо в два раза больше будут)...
Yandex
Объявления
25.08.2009, 04:21     Как записать битсет в файл?
Ответ Создать тему
Опции темы

Текущее время: 09:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru