【发布时间】:2012-05-08 06:01:50
【问题描述】:
我正在尝试从 Windows HIVE 文件中读取基本块。文件的前 4 个字节包含“regf”幻数。这个字符串是 ANSI,但也有 unicode 字符串。 如果我指定 MarshalAs 属性并将类型设置为 ByValTStr 它工作正常,但它不会读取 unicode 字符串。 MSDN 说如果你使用 ByValTStr,那么数组的类型由包含结构的字符集决定。问题是如果我将整个结构的字符集设置为 unicode,那么我将无法读取幻数(前 4 个字节)。
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
如何更改特定字符串的字符集,而不是整个结构?
我也在尝试使用 LPStr 类型,但它根本不起作用。
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
使用这种类型的编组而不是“regf”幻数,我会得到不可读的字符。
如何解决?
提前致谢。
【问题讨论】:
-
你可以通过只用字符串伪造一个额外的结构来做到这一点。在这里不起作用,它不是以零结尾的字符串。编组为 byte[] 或 int32 是正确的。这是一个数字。
标签: c# .net string character-encoding marshalling