【发布时间】:2014-11-11 16:05:30
【问题描述】:
sz 是一个 char 数组,缓冲区中的 memset 指向的是什么?如何将以下 C++ 代码转换为 Delphi?
int data = _ttoi(m_Strtag.GetBuffer(0));
unsigned char sz[4];
memset(sz,0, 4);
sz[0] = (unsigned char)((data >> 24) & 0xFF);
sz[1] = (unsigned char)((data >> 16) & 0xFF);
sz[2] = (unsigned char)((data >> 8) & 0xFF);
sz[3] = (unsigned char)(data & 0xFF);
这是 delphi 调用: 如果 SAAT_YTagSelect(hp, isenable, 1, sz, 4) 那么 ...
对于下面的delphi函数:
function SAAT_YTagSelect(pHandle: Pointer; nOpEnable1, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;
【问题讨论】:
-
FillChar是等价的。您真的希望我们为您翻译其余代码吗?你了解按位运算吗? -
sz 中的所有字节都是之后设置的,不需要将它们预设为零。并且可以删除与 $FF 的 ANDing。
-
@LU 是的,可以删除 memset。 & 0xff 确保我们避免范围错误。
-
还有
FillMemory(),它更接近memset()实际所做的——用指定的值填充内存。但它也委托给FillChar()(它实际上是对字节而不是字符进行操作,因此在 D2009 以后它确实被误命名了)。