agentsclimarketplace

Сериализация структур c в c через байтовый массив

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8/сериализация-структур-c-в-c-через-байтовый-массив

Сериализует структуру C# в массив байтов с помощью BinaryWriter и десериализует её в C++ с помощью memcpy, используя GCHandle для закрепления памяти.From its SKILL.md

Install
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

  1. Определение структур: Убедитесь, что структура в C# и структура в C++ имеют идентичные типы полей и порядок следования полей.
  2. Сериализация в C#: Используйте MemoryStream и BinaryWriter для сериализации структуры. Явно запишите каждое поле в фиксированном порядке.
  3. Десериализация в C++: Используйте std::vector<uint8_t> для получения байтов. Используйте std::memcpy для копирования байтов в поля структуры.
  4. Вспомогательный шаблон: Определите шаблон функции 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);
    }
    
  5. Маршалинг: Если нативный 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.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.