Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 23:54   #1
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию как в структуре разделить BYTE на 4 бита? :)

например BYTE 45 , 4 и 5 это флаги, как занести их в структуру? или как разделить этот байт на 2 части
karaulov вне форума Ответить с цитированием
Старый 29.03.2013, 00:12   #2
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию

http://hi.baidu.com/ivanvczhosbfind/...1ac85f840fab77
4.0

структуры для этого файла пытаюсь сделать, что бы можно было читать / записывать в файл

все получилось, только не знаю что за тип данных 4bit
karaulov вне форума Ответить с цитированием
Старый 29.03.2013, 00:17   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <iostream>

using namespace std;

int
main()
{
    union {
        unsigned char a;
        struct byte
        {
            unsigned low:4;
            unsigned high:4;
        } b;
    } byte;
    byte.a = 125;
    cout << byte.b.high << " " << byte.b.low << endl;
    return 0;
}
Вы можете объявить битовое поле (размером в 4 бита).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.03.2013, 00:19   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
что за тип данных 4bit
Это не тип, а размерность.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 29.03.2013, 00:24   #5
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
#include <iostream>

using namespace std;

int
main()
{
    union {
        unsigned char a;
        struct byte
        {
            unsigned low:4;
            unsigned high:4;
        } b;
    } byte;
    byte.a = 125;
    cout << byte.b.high << " " << byte.b.low << endl;
    return 0;
}
Вы можете объявить битовое поле (размером в 4 бита).
то есть я могу просто в структуру написать :4 ?
например так будет работать?
struct file
{
...
BYTE part1:4;
BYTE part2:4;
};

или как нужно записывать?

и что значит 125? я же писал что там один байт, например 89 мне нужно отдельно получить 8 и 9 (что бы можно было занести в какую-нибудь переменную потом)

Что написать в структуре? просто "BYTE byte" а потом разделять на 2 части byte ?
karaulov вне форума Ответить с цитированием
Старый 29.03.2013, 00:27   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пишите:
Код:
struct m {
    unsigned a:4;
    unsigned b:4;
    unsigned char c;
    unsigned d:4;
    unsigned e:4;
};
Это структура - 4bit, 4bit, 1byte, 4bit, 4bit, которая занимает 3 байта.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.03.2013, 01:00   #7
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию

а что означает

int (little endian number)

просто int ? (4 байта должно занимать)
karaulov вне форума Ответить с цитированием
Старый 29.03.2013, 01:10   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да, просто int. Ознакомьтесь с http://ru.wikipedia.org/wiki/Порядок_байтов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.03.2013, 09:18   #9
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию

Можете подсказать что у меня не правильно? (программа зависает перед выводом данных в консоль)

файл открываю так

Код:
FILE *fil;
    fil = fopen("file.dat","rb");
header headd;
fread(&headd,sizeof(header),1,fil);
в консоль нужно вывести эти данные,а number - little endian

вот заголовок файла
Код:
struct header
{
	char head[4];
	long version;
	char maintype;
	long custom;
	long number;
};
Код:
\nFILE: %s\n Version: %d\n Type:%s\n %d\n%d\n
вот сам файл
Вложения
Тип файла: txt file.txt (41 байт, 130 просмотров)

Последний раз редактировалось karaulov; 29.03.2013 в 10:04.
karaulov вне форума Ответить с цитированием
Старый 29.03.2013, 09:20   #10
karaulov
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 14
По умолчанию

и еще, размер sizeof(header) определяет как 20, хотя я должно быть 17 байт.
karaulov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WPF как отобразить картинку на canvas имея byte[] crawter WPF, UWP, WinRT, XAML 1 10.11.2012 05:22
Как передать результат функции как Array of Byte? Alex Cones Общие вопросы Delphi 4 05.12.2009 18:55
Подскажите! Как преобразовать определенный тип в array of byte BrainIce Общие вопросы Delphi 3 19.05.2009 17:22
Битовые операции: как узнать значение отдельного бита? phobos Общие вопросы C/C++ 5 30.04.2009 09:31
язык Си, задача - переводим в 16-й код, старшие три бита интерпретируем как некое число n drossel Помощь студентам 5 02.03.2008 17:24