【发布时间】:2013-01-31 23:25:30
【问题描述】:
我正在将旧的 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];
}
但要进行逐字节复制,我需要能够在运行时发现 this 的大小,并且 System.Runtime.InteropServices.Marshal.SizeOf 为此返回 4。
任何关于如何做到这一点的建议将不胜感激。
【问题讨论】:
标签: c#