我可以使用write(& stName,sizeof(stName),& FileName)并在其他程序中定义一个相同的结构来读取文件(XXX.h),当我使用C时,但我想做同样的使用C#和我不应该使用不安全模式。怎么解决这个问题?
修改
谢谢大家。我会尝试一下
修改
现在,如果我想使用C将struct写入file.h并使用C#从file.h读取结构,我是否有机会解决这个问题而不计算偏移量?因为当我想在结构中添加一些变量或其他结构时,计算偏移量不是一个好的答案。
答案 0 :(得分:3)
查看ISerializable界面和一般的序列化。
答案 1 :(得分:3)
即使在C中,这对IMO来说也是一件危险的事情。如果您使用不同的编译器,操作系统,体系结构等,您可以非常轻松地“破坏”您的数据文件 - 您绝对依赖于内存中数据的布局。这有点像直接暴露字段而不是属性 - 内存中布局应该是一个实现细节,可以在不改变公共表单(文件)的情况下进行更改。
当然,有很多种方法可以存储数据。例如:
在文件是否具有人类可读性,速度,大小等方面存在余额。有关Java的类似问题的答案,请参阅this question。
答案 2 :(得分:1)
你应该看一下NetDataContractSerializer。您可以标记希望序列化的结构部分,并使用文件流将其写出来。
答案 3 :(得分:1)
答案 4 :(得分:1)
使用托管C ++或C ++ / CLI。它可以读取你的.h文件结构。它可以使用:
进行读写read(in, &structure, sizeof(structure));
write(out, &structure, sizeof(structure));
它可以非常简单地将数据传输到.NET中的任何其他内容。
答案 5 :(得分:0)
您必须使用Bitconverter.convert()单独转换结构的每个成员。当struct包含数值数据类型时,这很有效,但在使用包含更复杂数据类型(如字符串,数组和集合)的结构时,可能必须执行更复杂的操作。出于这样的目的,您需要查看其他人提到的.Net序列化工具。
答案 6 :(得分:0)
您也可以查看Google Protocol buffers。您可能不希望在代码中添加另一个依赖项,但这意味着允许您执行此类操作。