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;
1 回答
等效于
memset
的是FillChar,并使用字节值填充一系列字节 .由于
sz
的字节顺序反转时,数组sz
中的所有字节都被置位,因此可以删除该行 .字节反转可以简化一点(用类型限制替换
and $FF
):通过用
Byte()
包含赋值,编译器被告知跳过范围检查 . 生成的汇编代码(带范围检查)的比较表明,这也产生了更有效的代码:填充sz数组的更直接的方法,没有位移例程: