我被困在這一個。使用MarshalAs和StructLayout讀取二進制數據
我讀它具有TE以下格式的二進制文件:
Field name Size in bytes Example
-------------------------------------
Date 19 1998_12_22 PM 20:15
Serial 4 0001
使用下面的結構和使用的答案this question我試圖讀取文件。
[StructLayout(LayoutKind.Explicit, Size=23, Pack = 1)]
struct MeasurementStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 19)]
[FieldOffset(0)]
public string Date;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
[FieldOffset(19)]
public string Serial;
}
然而,實例保存這個結構我在FieldOffset得到一個錯誤的類時19遺憾的是,這個錯誤是在荷蘭,但它大致翻譯爲「無法加載MeasurementStruct因爲現場在關19未對齊好(字段可能重疊)「。
我發現將FieldOffset [19]更改爲FieldOffset [20]會使錯誤消失。但是,在我的情況下,20是不是正確的抵消,是嗎?
這是一個錯字!修復.. – 2009-12-11 12:01:36
感謝您的回答。我給出的結構只是文件格式的簡化版本。實際的格式更加龐大和複雜,因此編碼所有字段並不是真正的選擇 – 2009-12-11 13:10:19