|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||
Как грамотно соединить структуру с массивом?14.05.2020, 22:07. Показов 5981. Ответов 75
Метки нет (Все метки)
Всем здравствуйте!
Дано: 1. структура UDT 2. массив Требуется соединить их вместе в одном массиве (типа Byte) так, чтобы новый массив начинался с членов данной структуры и продолжался/завершался членами данного массива. Для примера выбраны очень простенькие/маленькие структура и массив, но на самом деле они могут быть очень большими. И ещё условие задачи такое - циклами пользоваться нельзя, а то эдак я и сам могу тренькать, как сказал бы классик ![]()
0
|
||||||
| 14.05.2020, 22:07 | |
|
Ответы с готовыми решениями:
75
как грамотно соединить в локальную сеть 5 ПК и 3 пятиэтажных дома Как грамотно электрически и безопасно соединить ПК и ТВ кабелем HDMI-HDMI? Стек соединить с массивом |
|
Модератор
|
|
| 14.05.2020, 22:19 | |
|
Power_Basic, как должны размещаться члены структуры MyUDT? Поскольку при выравнивании членов структуры она будет занимать 8 байт, вместо 6. Второй момент, arr_Byte_array() всегда состоит из фиксированного количества элементов?
Какие типы присутствуют в структуре? Есть ли ссылочные?
0
|
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 14.05.2020, 23:02 [ТС] | |||
|
Чтобы этот новый массив можно было на диск скинуть в виде WAV-файла и/или переконвертировать в MP3-файл прямо в ОЗУ. Добавлено через 18 минут ![]() За границами этой ветки
0
|
|||
|
|
||||
| 14.05.2020, 23:07 | ||||
|
1
|
||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 15.05.2020, 00:51 [ТС] | |||
|
locm, ну мне ещё хочется сейчас попутно "подтянуть" свою технику программирования. Сенйчас на очереди как раз работа с указателями, массивами, адресами памяти и всё такое.
0
|
|||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||||||||||||
| 15.05.2020, 16:54 [ТС] | |||||||||||||||||
![]() Вот очень простая структура и очень простой массив. Как объединить их вместе в новом массиве так, чтобы новый массив начинался с членов (байтов) данной структуры и заканчивался членами "старого" байт-массива. Код требуется написать на Визуальном бейсике без использования операции FOR ... NEXT. А если это невозможно в принципе, ну тогда меня вполне устроит ответ "миссия невыполнима" ![]() И тогда использование строк останется для меня самым правильным подходом для таких ситуаций.
Добавлено через 12 минут Но в любом случае, ветка создана не для выяснения этого вопроса. Это пратика, а меня сейчас больше интересует теория, а именно работа с памятью, с адресами памяти, со структурами, с массивами и всё такое. Добавлено через 18 минут Ну код же уже написан, требуется только его завершить:
0
|
|||||||||||||||||
|
|
||||||||||||||||||||
| 15.05.2020, 17:00 | ||||||||||||||||||||
На PureBasic код может выглядеть таким образом при размере массива 100 байт.
2
|
||||||||||||||||||||
|
Модератор
|
|||||||||
| 15.05.2020, 17:39 | |||||||||
|
Как данные хранятся в файле (некоторые WINAPI требуют данные в таком формате): Как данные хранятся в памяти (и WINAPI в основном ожидают такие данные, но не всегда): В каком формате должны быть данные в итоге? locm, тут раздел PureBasic'а? Причем тут этот диалект? Не нужно скатывать и эту тему в обсуждение этого ЯП. Пока предупреждаю.
1
|
|||||||||
| 15.05.2020, 17:45 | |
|
0
|
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 15.05.2020, 19:06 [ТС] | |||
|
В итоге должен получиться вот такой массив байтов: 01, 00, 02, 00, 00, 00, 03, 04, 05. Но даже если получится вот такой, тогда это тоже будет считаться приемлемым решением: 01, 00, 00, 00, 02, 00, 00, 00, 03, 04, 05. Добавлено через 10 минут The trick и locm, большое вам обоим спасибо за советы относительно кодирования аудиопотока. Я очень внимательно и вдумчиво их прочитал, и хотя мне это очень полезно (ну правда очень полезно!), сейчас всё-таки хотелось бы не углубляться в ту сторону, потому что иначе мы слишком сильно отдалимся от главной (узкой) темы, ради которой была создана эта ветка. Добавлено через 9 минут Всё-таки есть практика и есть теория. Обычно я стремлюсь поскорее написать программу, чтобы поскорее увидеть рзультат. При таком подходе остаётся много "белых пятен" в изучении теории. А потом я из программы в программу тиражирую свои "удачные" подходы к решению схожих задач, хотя может быть можно это делать более правильно. Ну вот теперь мне как раз-таки и хочется потихонечку начать "закрашивать" эти белые пятна.
0
|
|||
|
Модератор
|
|||||||||||||
| 15.05.2020, 20:06 | |||||||||||||
Сообщение было отмечено Power_Basic как решение
Решение
А вообще тебе нужно использовать те функции что я написал и не заморачиваться с ручным размещением данных.
1
|
|||||||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||
| 15.05.2020, 21:49 [ТС] | ||
|
The trick, спасибо. Теперь я, по крайней мере, уже точно знаю, что "внутренними силами" Визуального Бейсика (без использования WINAPI-функций) такую операцию проделать невозможно.
Но просто мне хотелось понять на будущее, есть ли какие-нибудь несложные способы, которые можно использовать для таких целей в схожих ситуациях.
0
|
||
|
Модератор
|
||||||||
| 15.05.2020, 22:22 | ||||||||
Сообщение было отмечено Power_Basic как решение
РешениеТ.е. можно иметь 2 структуры, одна из которых - просто массив фиксированной длины. Так вот в этот массив можно скопировать любую структуру стандартными средствами.
1
|
||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||||||
| 16.05.2020, 18:21 [ТС] | ||||||||||
![]() Не пробовал, но заранее уверен, что сработает безотказно. Буду иметь в виду такой подход на всякий случай. Особенно он будет хорош для небольших массивов. Хотелось бы всё-таки отталкиваться от моего стартового кода в топике ветки. Ну например, меня тип данных Currency не интересует вообще никак. Да и потом, здесь же мы по байтику весь массив перебираем:
Ну а как потом массив-то присоединять? Добавлено через 6 минут Тоже с помощью цикла?
0
|
||||||||||
|
Модератор
|
|||
| 16.05.2020, 19:53 | |||
|
Есть еще способ сериализации через COM-stream, но это еще сложнее, но более универсально.
0
|
|||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||
| 16.05.2020, 21:21 [ТС] | ||||
![]() Вот например, Variant'ы можно как-нибудь приспособить для решения такой задачи? Ну например, в первый Variant поместить всю нашу структуру, во второй наш массив, потом их каким-нибудь образом объединить в один общий Variant, ну а на последнем шаге извлечь из полученного Variant'а массив байтов? Так не получится сделать?
0
|
||||
|
Модератор
|
|||||
| 16.05.2020, 21:52 | |||||
|
Добавлено через 54 секунды
0
|
|||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||
| 16.05.2020, 22:23 [ТС] | |||||
Я имел в виду, что, не обращаясь к диску, не получится.
![]() Универсальный контейнер и всё такое.
0
|
|||||
|
Модератор
|
|||
| 16.05.2020, 23:05 | |||
|
Добавлено через 12 минут В COM обычно если нужно сохранить состояние объекта (к примеру свойства контролов и т.п.) используется IPersist интерфейс (в VB6 аналог PropertyBag), туда записывается состояние которое безопасно может быть передано куда-нибудь, а затем прочитано. С точки зрения безопасного программирования, не нужно иметь структуру MyUDT, а нужно иметь класс, в котором будет свойство - Buffer, которое будет хранить данные. При сериализации каждое поле необходимо сохранять в том порядке в котором оно ожидается в бинарном представлении. Все это реализуемо в рамках как безопасного программирования, так и небезопасного. Полагаться на то как данные структуры размещаются в пяти - не нужно, вообще нужно держать в уме тот факт что о размещении в памяти вообще не нужно думать поскольку это машинозависимая вещь. Это в рамках безопасного программирования. Поэтому каждое поле необходимо сериализовать отдельно в нужном формате.
0
|
|||
| 16.05.2020, 23:05 | |
|
Помогаю со студенческими работами здесь
20
Как создать структуру, где будут поля с указателями на эту же структуру? Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. как грамотно форматировать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|