delphi - 如何将 byte[] 分配给记录

标签 delphi

在 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();

Data 是一个字节数组,在通过 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/

相关文章:

delphi - 处理 TTN_LINKCLICK 消息后如何知道气球上点击了哪个链接?

delphi - 访问冲突 dcc70.dll

delphi - 传送 Wav 音频数据的 DirectShow 过滤器的媒体类型设置是否正确?

xml - 为什么 Internet Explorer 在通过后退按钮返回页面时不显示正确的 XML 转换?

delphi - 如何将毫秒转换为 TDateTime?

Delphi - GLScene - 根据图像调整 Sprite 大小

delphi - TListView和鼠标滚轮滚动

mysql - 使用 TIdHTTPServer 时如何防止 "MySql has gone away"

delphi - 在 Delphi 应用程序中查看 SolidWorks 工程图

delphi - 如何在 delphi 中通过 WSDL 使用 SSRS 方法?