固定長の文字列を解析するプログラムを開発しようとしています。不正な整数値の整列
私自身のパーサークラスを書く代わりに、マーシャリングを使用することに決めました。下のように私は構造体を定義しました:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string Name;
[MarshalAs(UnmanagedType.I4, SizeConst = 2)]
public int Age;
}
私はこの構造体をこのように呼びます。
string message = "SampleName30";
IntPtr pBuf = Marshal.StringToBSTR(message);
MyStruct ms = (MyStruct)Marshal.PtrToStructure(pBuf, typeof(MyStruct));
私は値をチェックした場合:
ms.Name is SampleName // OK
しかしms.Age
値は3145779
を返します。私は期待していますms.Age = 30
何が間違っていますか?この問題を解決するにはどうすればよいですか?
ここでマーシャリングを使用するのはかなり悪い考えです... –
UnamangedType.I4では使用しないでくださいが、なぜSizeConstを使用していますか?配列や文字列ではありません。アンマネージ構造定義を転記できますか? –
私の目的は、最後の2文字を年齢として設定することです。だから私は構造についてのsizeconstを与える。 – enduser237