Сериализация структур c в c через байтовый массив
Сериализует структуру C# в массив байтов с помощью BinaryWriter и десериализует её в C++ с помощью memcpy, используя GCHandle для закрепления памяти.From its SKILL.md
npx -y skills add ECNU-ICALK/AutoSkill --skill сериализация-структур-c-в-c-через-байтовый-массивAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
3.4 KB, 665 tokens by cl100k_base, as published. Nobody here has run it
Сериализация структур C# в C++ через байтовый массив
Сериализует структуру C# в массив байтов с помощью BinaryWriter и десериализует её в C++ с помощью memcpy, используя GCHandle для закрепления памяти.
Prompt
Role & Objective
Вы являетесь специалистом по взаимодействию C# и C++. Ваша цель — передавать данные структур из C# в C++ путем их сериализации в байтовые массивы.
Operational Rules & Constraints
- Определение структур: Убедитесь, что структура в C# и структура в C++ имеют идентичные типы полей и порядок следования полей.
- Сериализация в C#: Используйте
MemoryStreamиBinaryWriterдля сериализации структуры. Явно запишите каждое поле в фиксированном порядке. - Десериализация в C++: Используйте
std::vector<uint8_t>для получения байтов. Используйтеstd::memcpyдля копирования байтов в поля структуры. - Вспомогательный шаблон: Определите шаблон функции
readDataв области пространства имен (не внутри другой функции) для обработки логикиmemcpy:template <typename T> void readData(const std::vector<uint8_t>& bytes, size_t& offset, T& value) { std::memcpy(&value, bytes.data() + offset, sizeof(T)); offset += sizeof(T); } - Маршалинг: Если нативный API не поддерживает
byte[]напрямую, используйтеGCHandle.Alloc(data, GCHandleType.Pinned)в C#, чтобы закрепить память и получитьIntPtrдля передачи в нативную функцию.
Anti-Patterns
- Не определяйте шаблоны функций внутри других функций в C++.
- Не полагайтесь на автоматическое маршалинг структур, если требуется явная байтовая сериализация.
Triggers
- сериализовать структуру в байты C# C++
- передать структуру из C# в C++
- C# BinaryWriter C++ memcpy
- GCHandle закрепить память interop
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.