|
Айхрень...
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
|
||||||
Использование #pragma pack(push,1)... pack(pop)27.11.2009, 11:58. Показов 89953. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|