Я сортирую данные между приложениями C # и C ++. В приложении C # я заставляю размер строки иметь некоторый размер (скажем, 256 байт). Я хотел бы прочитать то же самое количество в C ++ (я буду воссоздавать структуры с reinterpret_cast), чтобы данные оставались отформатированными, как в приложении C #. К сожалению, я довольно сильно разболтался в C ++ и не уверен, как заставить размер строки в структуре в C ++.
По запросу, пример. У меня есть структура в C #, которая выглядит так:
[StructLayout(LayoutKind.Sequential)]
public struct DataLocater
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string filename;
[MarshalAs(UnmanagedType.I4)]
public Int32 sizeOfData;
public Int32 startLocation;
public Int32 encrypted;
}
Который я собираю несколько (вместе с другими данными) в файл данных. Затем файл C ++ читает этот файл, и я буду анализировать его обратно в struct в C ++ с той же структурой. Моя первая попытка этой структуры выглядела так:
struct DataLocater
{
std::string filename;
int sizeOfData;
int startLocation;
int encrypted;
};
Но у компилятора нет возможности узнать, что я хочу, чтобы эта std :: string была 256 байтов.
edit: например, добавление полного файла заголовка.
#pragma once
#include "CoreArea/Singleton.h"
class FileReader : public Singleton<FileReader>
{
friend class Singleton<FileReader>;
public:
void* GetFileData(std::wstring fileName, int &size);
private:
FileReader();
~FileReader();
struct Header
{
std::string somestring;
int numOfFiles;
};
struct DataLocater
{
char[256] filename;
int sizeOfData;
int startLocation;
int encrypted;
};
};