我在编组 C 字符数组时遇到问题。我有以下 C# 结构:
[StructLayout(LayoutKind.Explicit, Size = 16, CharSet = CharSet.Ansi), Serializable]
internal struct Header
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 4)]
[FieldOffset(0)]
public string header;
[FieldOffset(4)]
public int version;
[FieldOffset(8)]
public int diroffset;
[FieldOffset(12)]
public int direntries;
}
以及从流中读取此结构的以下代码:
public static T ReadStruct<T>(this Stream stream) where T : struct
{
var sz = Marshal.SizeOf(typeof(T));
var buffer = new byte[sz];
stream.Read(buffer, 0, sz);
var pinnedBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
var structure = (T) Marshal.PtrToStructure(
pinnedBuffer.AddrOfPinnedObject(), typeof(T));
pinnedBuffer.Free();
return structure;
}
现在我的问题是在header
读取结构后该字段丢失了一个字符。从中读取结构的文件包含四个字节VPVP
,但在ReadStruct
头字符串读取结构后仅包含VPV
. 如果我查看调试器中读取函数中的字节数组,则该数组包含值 86、80、86、80,即VPVP
. 我也尝试使用LayoutKind.Sequential
for ,StructLayout
但这并没有改变任何东西。
我做错了什么或者为什么我的字符串中缺少一个字符?