如何将byte []分配给记录

Iva*_*nov 5 delphi

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

tPacket * packet = (tPacket *)data; //data is byte[] array; tPacket is a structure
Run Code Online (Sandbox Code Playgroud)

在C#中:

tPacket t = new tPacket();
GCHandle pin = GCHandle.Alloc(data, GCHandleType.Pinned);
t = (tPacket)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(tPacket));
pin.free();
Run Code Online (Sandbox Code Playgroud)

数据是在通过TCP接收数据包后用作接收缓冲区的字节数组.该代码将数据放入tPacket(结构)的实例中,以便稍后可以访问该结构.

如何在Delphi中完成?

ska*_*adt 4

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

var
  Data: array[1..SizeOf(TMyStruct)] of byte;
  s : TMyStruct absolute Data;
Run Code Online (Sandbox Code Playgroud)

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