delphi - 如何在Delphi中从字节数组复制双字大小数据并将其转换为双字类型值?

标签 delphi

我正在尝试将下面的 C++ 代码片段转换为 Delphi:

DWORD n;
memcpy(&n, lpData, sizeof(n)); <==== the C++ data type : LPBYTE lpData = NULL; 
wprintf(L"REG_DWORD - ValueName: %s, Data: %u\n", pValueName, n);

我不知道Delphi部分,我尝试过如下代码:

lpData: array of byte;
n : DWord;
// then do not know how to use 
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: NativeUInt);

这是对我来说最困难的部分:

  1. 我不知道如何将 lpData 转换为指针。

  2. 变量Destination类型是PByte,还是不是?

  3. 如何获取长度?

  4. 如何将目标值转换为n(Dword类型值)?

最佳答案

动态数组已经是指针,因此下面的代码有效:

var
  lpData: array of byte;
  n : DWord;
begin
  lpData := [$0A, $0B, $0C, $0D];
  CopyMemory(@n, lpData, SizeOf(n));
  Caption := Format('%x', [n]);

请注意,应初始化lpData

此外,字节数组;C++ 数据类型的可疑模拟 - 它是 Delphi 特定的托管类型。数组体可能用作存储,但总体用法可能有所不同。

LPBYTE的直接模拟是Delphi PByte,有时PByteArray很方便。值得描述一下 - 你的 lpData 是如何填充的。

关于delphi - 如何在Delphi中从字节数组复制双字大小数据并将其转换为双字类型值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62336320/

相关文章:

sql - 如何在 Delphi 中查找与特定格式匹配的 Access 数据库中所有表的列表

delphi - 可以在 DLL 中使用 TDateTime 以供其他语言使用吗?

delphi - "TypeIdentifier"的定义在哪里

delphi - 处理DbExpress SQL错误代码245

delphi - 如何访问DataSnap Server中的请求 header ?

delphi - 在 Delphi 中更改引发异常的图标

delphi - 为什么在delphi 10.3中CopyRect翻转了第二张图像?

sql - 解析 SQL 语句的库

delphi - 如何从 TRichEdit 控件中完全删除选择栏?

delphi - FinalBuilder 服务器 + FastMM4 示例