AutoSkill Сериализация структур C# в C++ через байтовый массив
Сериализует структуру C# в массив байтов с помощью BinaryWriter и десериализует её в C++ с помощью memcpy, используя GCHandle для закрепления памяти.
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/сериализация-структур-c-в-c-через-байтовый-массив" ~/.claude/skills/ecnu-icalk-autoskill-c-c && rm -rf "$T"
manifest:
SkillBank/ConvSkill/english_gpt4_8/сериализация-структур-c-в-c-через-байтовый-массив/SKILL.mdsource content
Сериализация структур 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
:memcpytemplate <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[]
в C#, чтобы закрепить память и получитьGCHandle.Alloc(data, GCHandleType.Pinned)
для передачи в нативную функцию.IntPtr
Anti-Patterns
- Не определяйте шаблоны функций внутри других функций в C++.
- Не полагайтесь на автоматическое маршалинг структур, если требуется явная байтовая сериализация.
Triggers
- сериализовать структуру в байты C# C++
- передать структуру из C# в C++
- C# BinaryWriter C++ memcpy
- GCHandle закрепить память interop