我正在尝试从 CArchive 正在写入的文件中读取数据。我有用于使用 CArchive 进行读写的原始源。但是,我正在尝试通过 C# 代码阅读此内容。我能够读取文件的大部分内容,但是当我必须读取写入文件中的结构数组时我被卡住了。
我在stackoverflow上看到了其他问题,但它们对我没有用。
他们建议使用此功能。
public static T ByteToType<T>(BinaryReader reader)
{
byte[] bytes = reader.ReadBytes(Marshal.SizeOf(typeof(T)));
GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
T theStructure = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return theStructure;
}
但这对我来说效果不佳。
所以这是我的 C++ 代码:
结构:
struct MyStruct
{
WORD field1 : 1;
WORD field2 : 1;
WORD field3 : 1;
WORD field4 : 1;
WORD field5 : 1;
WORD field6 : 1;
WORD field7 : 1;
WORD field8 : 1;
WORD field9 : 1;
};
CArchive 读取代码:
m_data = new MyStruct[3600];
cArchiveReader.Read(m_data, 3600 * sizeof(MyStruct));
现在 C# 代码:
我的结构
public struct MyStruct
{
ushort field1;
ushort field2;
ushort field3;
ushort field4;
ushort field5;
ushort field6;
ushort field7;
ushort field8;
ushort field9;
}
**Reading Code:**
var stream = new MemoryStream(bytes);
var reader = new BinaryReader(stream);
for (int I=0; I<3600; I++)
{
structureCollection.Add(ByteToType<NodeFlag>(reader));
}
现在在这个电话之后,当我检查结构集合时,节点数据不正确。对于集合中的第六个结构,两个字段的值是 256,在第 7 或第 8 个结构之后,所有字段都是 256。现在这是错误的数据。我已经通过 C++ 代码阅读了这篇文章,并且效果很好。字段值为 1 或 0,但 256 数据完全无效。