在C++中,它是这样完成的:

tPacket * packet = (tPacket *)data; //data is byte[] array; tPacket is a structure

在C#中:
tPacket t = new tPacket();
GCHandle pin = GCHandle.Alloc(data, GCHandleType.Pinned);
t = (tPacket)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(tPacket));
pin.free();

数据是在通过TCP接收到数据包之后用作接收缓冲区的字节数组。该代码将数据放入tPacket实例(一个结构)中,因此我以后可以访问该结构。

在Delphi中如何完成?

最佳答案

您还可以使用absolute关键字来强制两个结构共享相同的内存地址:

var
  Data: array[1..SizeOf(TMyStruct)] of byte;
  s : TMyStruct absolute Data;

写入S的任何数据也可以作为数据使用,而不必执行移动或指针转换。

关于delphi - 如何为记录分配一个byte [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/878921/

10-12 00:16