![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - byte stream в struct? |
|
C/C++ - byte stream в struct?
|
runs with scissors Сообщения: 642 |
Понимаю, что мой вопрос явно ламерский, но все же. У меня есть свежеполученная откуда-нибудь куча байтов, которую надо разместить в 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; ![]() подскажите, как это покрасивше сделать? |
|
------- Отправлено: 00:07, 15-07-2008 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Собирать байты в int imho логичнее через двоичный and, а не через сложение.
Код зато вполне переносимый получился - будет корректно работать на любой платформе. |
Отправлено: 11:29, 15-07-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 30
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Это чтение из файла. Файл должен быть открыт в бинарном режиме. |
|
Отправлено: 12:06, 15-07-2008 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать batcom, это не у меня надо спрашивать, а у Arrest. Например, для того, чтобы потом не геморроиться с приведением типов в выражениях.
По поводу кода: садись, два! 1. Структура в памяти может храниться как упакованной, так и выровненной по длине машинного слова. 2. Порядок байтов в слове на разных платформах разный |
Отправлено: 14:24, 15-07-2008 | #4 |
Новый участник Сообщения: 30
|
Профиль | Отправить PM | Цитировать |
|
Последний раз редактировалось batcom, 15-07-2008 в 14:54. Отправлено: 14:41, 15-07-2008 | #5 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать массивы тоже выравниваются
теоретически, char может быть и 16-битным (хотя во всех известных реализациях он 8-битный) кстати, код Arrest всё же непереносимый - в 16-битной системе int так же 16-битный |
Отправлено: 15:22, 15-07-2008 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] 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 |
|