Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - byte stream в struct?

Ответить
Настройки темы
C/C++ - byte stream в struct?

Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


Понимаю, что мой вопрос явно ламерский, но все же. У меня есть свежеполученная откуда-нибудь куча байтов, которую надо разместить в struct: первые два байта в первое поле структуры, вторые два байта - во второе поле структуры, следующие 4 байта - в третье поле... вопрос: как это сделать наиболее рационально и красиво? додумался до такого:
Код: Выделить весь код
int another_byte;
int result;
result = byte_heap[0];
another_byte = byte_heap[1];
another_byte = another_byte << 8;
result += another_byte;
structure.field1 = result;
но, сами понимаете, некрасиво, нерационально
подскажите, как это покрасивше сделать?

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.


Отправлено: 00:07, 15-07-2008

 

Ветеран


Сообщения: 3449
Благодарности: 734

Профиль | Отправить PM | Цитировать


Собирать байты в int imho логичнее через двоичный and, а не через сложение.
Код зато вполне переносимый получился - будет корректно работать на любой платформе.

Отправлено: 11:29, 15-07-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Busla:
Собирать байты в int »
, а зачем их нафиг в данном члучае собирать в int, что-за глюк я че-то не понял! в вопросе и содержится ответ byte stream в struct. читай прямо в струтуру не по одному байту а сразу весь ращзмер структуры.
PHP код: Выделить весь код

typedef struct 

 
{
  
WORD ab;
  
DWORD c;
 }
somestuct
...
 
somestuct *data;
 
read(  handledatasizeof(somestuct) ); // все поля заполнены 

Это чтение из файла. Файл должен быть открыт в бинарном режиме.

Отправлено: 12:06, 15-07-2008 | #3


Ветеран


Сообщения: 3449
Благодарности: 734

Профиль | Отправить PM | Цитировать


batcom, это не у меня надо спрашивать, а у Arrest. Например, для того, чтобы потом не геморроиться с приведением типов в выражениях.

По поводу кода: садись, два!

1. Структура в памяти может храниться как упакованной, так и выровненной по длине машинного слова.
2. Порядок байтов в слове на разных платформах разный
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:24, 15-07-2008 | #4


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


#pragma pack(1) ???
Цитата Busla:
Порядок байтов в слове на разных платформах разный »
PHP код: Выделить весь код

#pragma pack(1) 

typedef struct  
 

  
unsigned char a[2], b[2], c[4]; 
 }
somestuct;
#pragma pack() 

так то пойдет нет?
Цитата Busla:
садись, два!»
Ну хотябы три...

Последний раз редактировалось batcom, 15-07-2008 в 14:54.


Отправлено: 14:41, 15-07-2008 | #5


Ветеран


Сообщения: 3449
Благодарности: 734

Профиль | Отправить PM | Цитировать


массивы тоже выравниваются
теоретически, char может быть и 16-битным (хотя во всех известных реализациях он 8-битный)
кстати, код Arrest всё же непереносимый - в 16-битной системе int так же 16-битный
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 15-07-2008 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - byte stream в struct?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Bit и Byte _VIN_ Хочу все знать 6 03-12-2010 23:06
Giga Byte GA-EP45-DS4 А дальше почти нечего не знаю binders Выбор отдельных компонентов компьютера и конфигурации в целом 13 20-10-2008 02:55
MPEG-2 transport stream...Хелп!!! Холли Видео и аудио: обработка и кодирование 18 24-10-2007 11:41
[решено] Confirm stream loss (KAVICHS:$DATA) - что за сообщение при копировании? Alex Cop Microsoft Windows 2000/XP 3 06-09-2006 10:01




 
Переход