私はこのようなことをしていました:
[StructLayout(LayoutKind.Sequential)]
public struct V_REQUEST
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
private string payLoad;
public string payLoadStr
{
set
{
if (value != null)
payLoad = value.PadRight(value.Length+1, '\0').ToCharArray();
}
}
}
public object somemethod(byte[] bytes_data)
{
string strrequest = Encoding.GetString(bytes_data);
myobj.payLoad = strrequest;
}
これは常に私のデータを台無しにします。つまり、データに奇妙な文字が表示されるということです。
次に、プロパティを次のように置き換えました。
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
private byte[] payLoad;
public string payLoadStr
{
set
{
if (value != null)
{
for (int i = 0; i < value.Length; i++)
payLoad[i] = value[i];
}
}
}
そしてそれは美しく機能します!!! ToCharArray が安全でないのはなぜですか?