169 похожих чатов

Господа, ничего не понимаю... есть стркутура простецкая typedef struct {

unsigned char domain;
unsigned char key;
} DomainKeyPair;
есть вот такой код, где я структуру запаковывю просто в данные что передать в аргумент (void*) (загвоздка в том что вместе со структурой нужно передать еще количество элементов. запихал их в самый конец):

DomainKeyPair exclusions[] = {
{ 0x40, 0x10 }, { 0x40, 0x09 }, { 0x90, 0x30 }
};
size_t exclusionCount = sizeof(exclusions) / sizeof(exclusions[0]);
HAPLogError(&kHAPLog_Default, "GABELLA exclusions: %d, counter: %d", sizeof(exclusions), exclusionCount); // тут паказывает 6 и 3 - все верно
// формирую кусок памяти с данными которые передам в колбэк
size_t contextSize = sizeof(exclusions) + sizeof(size_t);
void* callbackContext = calloc(1, contextSize); // сначала выделял малоком, потом выделил калоком, чтобы убедиться что не осталось мусора.
memcpy(callbackContext, exclusions, sizeof(exclusions));
memcpy((char*)callbackContext + sizeof(exclusions), &exclusionCount, sizeof(size_t));

сейчас покажу как распаковываю:
DomainKeyPair* exclusions = (DomainKeyPair*)context;
size_t exclusionCount = *((size_t*)((char*)context + sizeof(exclusions)));
HAPLogError(&kHAPLog_Default, "GABELLA exclusionCount into rhe func: %d", exclusionCount); // показывает 209040

в чем соль? мне нужно передать данные и их число, но в фреймфорке есть всего один аргумент (void*)
как тут лучше поступить?

23 ответов

52 просмотра

ну у тебя данные последовательно получается pointer+data-sizeof(len)

дай на godbolt.org MRE

Andrey-Andrey Автор вопроса
²
дай на godbolt.org MRE

Там код огромный, попытаюсь сейчас куски смоделировать похожие

Привет! Я рекомендую посмотреть в сторону tuple, просто сделать ещё одну пару в таком случае

Andrey-Andrey Автор вопроса
²
дай на godbolt.org MRE

https://godbolt.org/z/Yx3hTK45j

²
шо за tuple

Ну типо пара

Malformed C
Ну типо пара

ну типо расширение пары на произвольное число элементов после добавления вариативных шаблонов в с++11

Qqqq
ну типо расширение пары на произвольное число элем...

ну до этого в TR1 рекомендовали не менее 10 элементов поддерживать

Зачем копировать exclutions , если можно просто указатель на неё закинуть ?

Как поступить -паковать всё в структуру.

Andrey-Andrey Автор вопроса
Ilya Zviagin
Как поступить -паковать всё в структуру.

Я вроде как поставил циферку спереди, и вроде как все разобралось ) Отложил до вторника во вторник ещё буду колдовать.

Стикер

²
шо за tuple

Нет в Си туплов...

Ilya Zviagin
Нет в Си туплов...

Только структуры есть, структуры надо делать

Andrey-Andrey Автор вопроса
Ilya Zviagin
Только структуры есть, структуры надо делать

Ну была идея запихать это в структуру и какое-то туда же. Так? То есть структура, в ней структура(домен, кей) И каунтер да?

Andrey Andrey
Ну была идея запихать это в структуру и какое-то т...

Да всё что тебе надо Просто если у тебя есть в callback только один указатель на void то есть только два варианта либо ты пакуешь какое-то маленькое число туда если тебе этого хватит, либо делаешь структуру создаёшь её пихаешь туда всё что угодно и указательную структуру передаешь в callback

Andrey Andrey
Ну была идея запихать это в структуру и какое-то т...

я видел реализация вектора подобной паковкой https://github.com/eteran/c-vector

Данил Паршин
Ну слишком муторно)) 😊

ну пофакту там все макросами обмазано, намана

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта