从指针变量中取出部分数据(200分)

  • 主题发起人 主题发起人 nslhw
  • 开始时间 开始时间
N

nslhw

Unregistered / Unconfirmed
GUEST, unregistred user!
Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word)
串口访问控件读取缓冲区数据的事件,返回一个指针buffer,以及返回的数据长度word,返回的数据中,从第10个字节开始,每4个字节代表一个浮点数,请问怎么将这么些浮点数分离取出来放到浮点型的变量里。只举取一个浮点数的例子就可以了。
 
var
vI, vCount: word;
vtmpBuf:array[0..3] of char;
vtmpList: TStringList;
begin

vtmpList := TStringList.Create;
vCount := 10;
while vCount < BufferLengthdo
begin
fillchar(vtmpBuf, 4, 0);
move(Buffer[vCount], vtmpBuf, 4);
vtmpList.add(String(vtmpBuf));
vCount := vCount + 4;
end;

//然后把vtmpList每个值转换为浮点数
vCount := vtmpList.Count - 1;
for vI := 0 to vCountdo
begin
//自己发挥吧
//变量 := StrToFloat(vtmpList.Strings[vI]);
end;
 
procedure Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
type
TMyRec = packed record
Prefix: array [0..9] of Byte;
Data: array [0..0] of Single;
end;
PMyRec = ^TMyRec;
var
P: PMyRec;
I, N: Integer;
begin
P:= Buffer;
N:= (BufferLength - 10) div 4;
for I:= 0 to N - 1do
begin
do
MyProcess(P^.Data);
// 自己写这个处理过程
end;
end;
 
用指针就很简单了.
1/定义一个浮点类型指针:
var p:^Single;
2/把这个指针指向buffer起始处.
p:=buffer
3/移动10字节到你要取的位置.
p:=pointer(integer(p)+10);
4/用p^即取出你要的数据了.
 
后退
顶部