如何将记录转为字节数组?
- Delphi(Pascal) code
procedure TMainForm.login; var buffer:TBytes;//字节数组 Login:TPRLogin;//记录begin SetLength(buffer,SizeOf(TPRlogin)); StrPCopy(login.ID,Edit.Text); Login.flag:=PSKLogin; CopyMemory(@buffer,@login,SizeOf(login));//明显的拷贝方式错误,但是不知道如何去转换,请指教。 ShowMessage(IntToStr(SizeOf(Login))); UDP.SendBuffer(Edit1.Text,StrToInt(Edit2.Text),buffer);end;
怎么去转换,还有怎么去还原?
[解决办法]
上面看错了,以为你没setlength,其实是你的CopyMemory用错了,因为TBytes其实是指错,所以你调CopyMemory时再@buffer取地址一次是不对的,改成这样:
CopyMemory(Pointer(buffer),@login,SizeOf(login));
其实用rawtobytes更简单,你上面的代码改成:
procedure TMainForm.login;
var
Login:TPRLogin;//记录
begin
StrPCopy(login.ID,Edit.Text);
Login.flag:=PSKLogin;
UDP.SendBuffer(Edit1.Text,StrToInt(Edit2.Text),rawtobytes(Login,SizeOf(TPRLogin)));
end;