我正在将一个旧的Visual BASIC程序转换为C#。它通过以太网向一些工业设备发送消息。为此,它从用户定义的固定大小块中组装字节流。
这些块中大多数都很小,在C#中,可以轻松地创建几个字节或整数的结构体,并使用StructLayout来控制它们的大小和布局,例如:
这些块中大多数都很小,在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。
如有建议将不胜感激。
BinaryWriter
。在我看来,这使得格式更加清晰。 - Jon Skeet