我正在将旧的 Visual BASIC 程序转换为 C#。它通过以太网向某些工业机器发送消息。为此,它从固定大小的用户定义块组装字节流。
大多数这些块都很小,在 C# 中,很容易创建几个字节或整数的结构,并使用 StructLayout 控制它们的大小和布局,例如
[StructLayout(LayoutKind.Sequential, Pack = 1)]
...所以当我们进入非托管空间进行按字节复制时,我们没有字节顺序或填充问题。
但是有些 VB6 结构是大数组,例如,
Private Type SEND_MSG_BUFFER_320_BYTES
bytes(0 To 319) As Byte '320 bytes
End Type
我正在为如何在 C# 中做到这一点而苦苦挣扎。我可以在一个类中创建一个固定大小的数组,例如,
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class SOME_BYTES
{
public byte[] b = new byte[320];
}
但要进行逐字节复制,我需要能够在运行时发现它的大小,并且 System.Runtime.InteropServices.Marshal.SizeOf 为此返回4。
任何有关如何做到这一点的建议将不胜感激。