|
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
data,vdata : double ;
begin
move(buffer^,pchar(@rbuf)^,bufferlength);
data := (rbuf[1] * 256) + rbuf[2] ;
data := data *0.0625 ;
displayt.caption := floattostr(data);
vdata := (rbuf[3]*256)+rbuf[4];
vdata := (vdata * 0.0025*4.3)+0.25 ;
displayv.caption := floattostr(vdata);
end
----------------------------------------------------------------------------------------------
move是在两个地址间拷贝数据,Move(S,D,Len)就是从S地址处开始拷贝Len个字节,然后在D地址开始的Len字节空间里存储
----------------------------------------------------------------------------------
有些人遇到的困惑是为什么 move(s,b,len)不行呢?同样我也遇到这样的困惑.
看了一样move的函数源码才明白.
procedure Move( const Source; var Dest; count : Integer );
{$IFDEF PUREPASCAL}
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);//取内存地址
D := PChar(@Dest);//取内存地址
if S = D then Exit;
if Cardinal(D) > Cardinal(S) then
for I := count-1 downto 0 do
D[I] := S[I]
else
for I := 0 to count-1 do
D[I] := S[I];
end;
本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2010/0120/19934.php |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|