|
Айхрень...
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
|
||||||
Использование #pragma pack(push,1)... pack(pop)27.11.2009, 11:58. Показов 90455. Ответов 51
Метки нет (Все метки)
Добрый день, товарищи.
Задался вопросом о записи в файл структур данных, читал читал в интернете много интересного. Наткнулся на статью, где описан такой вот вариант задания структур:
Я использую структуру с уже определёнными размерами параметров, так что её размер не будет меняться во времени, проверил, у меня всё работает. Но почему же автор всё-таки не рекомендует это использовать??? Может есть ещё интересные варианты? Для записи в файл использую CreateFile, WriteFile (MSDN->System services->File services->file systems->file management)... Заранее благодарю.
0
|
||||||
| 27.11.2009, 11:58 | |
|
Ответы с готовыми решениями:
51
IAR EWARM, непонятное поведение data pragma pack Русские символы NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251 |
|
|
||||||
| 29.05.2012, 17:20 | ||||||
|
Заменила все long'и на int'ы и теперь работает в 64-битном Минте
, мб такое прокатит и в 32-битной системе![]() Вот небольшая программа превращающая превращает обычный рисунок в негатив ![]()
0
|
||||||
|
|
|||||||
| 29.05.2012, 17:36 | |||||||
|
И более аккуратно было бы делать что-то типа:
1
|
|||||||
|
|
|
| 29.05.2012, 18:01 | |
|
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 31.05.2012, 10:57 | ||
|
Ну и в начале нужна проверка, что это 24 битная картинка.
0
|
||
|
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 21
|
|
| 26.07.2013, 00:01 | |
|
Добавлю 3 комейки.
Еще не докопавшись до #pragma pack, решил, что (поскольку типы данных - ряд факториала) просто надо составлять структуры, помещая вверх самые объемные типы... и вниз по убывающей. А в конце ставить "пустой" член структуры, дополняющий размер структуры до размера, кратного размеру наибольшего типа. В редких случаях, когда структура состит всего из двух членов, один из которых имеет тип максимального размера, а другой - минимального, "потери" памяти будут ощутимы.(реальных программ, в которых это может сказаться - еще меньше) В большинстве же случаев они будут ничтожны. Зато хорошая скорость и гарантия не столкнуться с одной проблемой. А вот застраховаться от различия в размере типов данных в разных... ситуациях - получается нельзя? - Это жаль. Разве что завести себе за правило всегда проверять типы при переходе на новое место? Добавлено через 23 минуты Только не "ряд факториала", а геом.прогрессия Добавлено через 10 минут А лучше всего было бы выбирать размер типов данных самому... из некоторого набора. А может это возможно?
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 02.12.2015, 13:34 | |
|
Используя пример Evg
C++ #pragma pack (push, X) struct { char f1; int f2; short f3; }; #pragma pack (pop) Использовать push с цифрой восемь и более, в данном примере, не имеет смысла потому, что размер наибольшего элемента структуры - int (четыре байта) меньше, чем эти параметры. И автоматом будет приводиться по наибольшему элементу структуры.
1
|
|
|
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 4
|
|||||||||||
| 23.12.2016, 11:51 | |||||||||||
|
Спасибо Evg за пример с #pragma pack. Долго искал эту ценную информацию.
Моя задача в том, чтобы данные разной длины из структуры отправить байт за байтом. Для этого я хочу использовать одну и ту же часть памяти и как структуру с данными разной длины и как массив с ячейками по 8 бит. То есть мне это нужно для того, чтобы из структуры с данными разной длины быстро получить массив данных по 8 бит. Для этого важно, чтобы данные в структуре расположились в памяти без пробелов. я создам 8-ми битный массив и наложу на него структуру. Благодаря #pragma pack (push, 1) данные структуры будут расположены в памяти без пробелов. Вопрос: А байтовый массив может оказаться расположен в памяти с пробелами? Как я понял на эксперименте - нет. Да и по логике. Вот пример как наложить структуру на массив (обращаться к массиву как к структуре):
А как наоборот - наложить массив на структуру (обращаться к структуре как к массиву)? Добавлено через 43 минуты А как наоборот - наложить массив на структуру (обращаться к структуре как к массиву)? Нашёл ответ сам:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 4
|
|
| 23.12.2016, 14:42 | |
|
В учебниках я не нашёл почему звёздочка то до названия, то после названия:
point1 = (*(struct Point_t*)(x)); Как расшифровывается эта строка? point1 - это указатель типа "struct Point_t" , а дальше..?
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 4
|
|||||||
| 23.12.2016, 17:05 | |||||||
struct Point_t *xx_ptr; //xx_ptr-указатель на структуру Но что такое тип struct Point_t* ? Добавлено через 18 минут Понял: тип struct Point_t* - это "Указатель типа struct Point_t" Вот простой пример: void *p; // Указатель обобщенного типа int *a; // Указатель на целое число a = (int*) p; // Указатель а пусть станет равным указателю р после его приведения к типу "Указатель на целое число" Взято от сюда: http://www.intuit.ru/studies/c... 974?page=7
0
|
|||||||
|
|
|
| 23.12.2016, 21:03 | |
|
У тебя уже набралось 3 поста, по идее ты уже можешь темы создавать. Создай себе по одной теме на каждый интересующий тебя вопрос. В теме про упаковку структур ты всё равно не найдёшь желающих обучать тебя базовым основам из учебника
0
|
|
| 23.12.2016, 21:03 | |
|
Помогаю со студенческими работами здесь
52
Pack() [function.pack]: Type H: illegal hex digit m in Сделать так чтобы если вводится push выполнялась функция push, если pop то pop Push, Pop push и pop Функции pop и push Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|