字串是:
AA 02 DF 07 31 00 31 00
AA 是标志,02 是长度 DF 07 是2008年 31 00 31 00=11
标志(byte)|长度(byte)|日期(word)|内容(Widestring)这个长度是后面内容的长度。现在想把这个字串放到自定义的结构中:type
Tmsg=packed reocrd
Flg,len:byte;
SData:word;
info:Widestring;
end;。
var str:string;
msg:Tmsg;
begin
str:='AA02DF0731003100';
下面如何 把 str 的内容放到 msg 这个结构中呢?
最后要得到:
msg.flg:=AA
msg.len:=02;
msg.Sdata:=DF07
msg.info:=31003100类似于一个局域网通信的程序。所以后面的内容变化。前面的长度也会变化。所以想通过一个自定义的结构来操作。感觉上要方便点吧。不过不太会。
AA 02 DF 07 31 00 31 00
AA 是标志,02 是长度 DF 07 是2008年 31 00 31 00=11
标志(byte)|长度(byte)|日期(word)|内容(Widestring)这个长度是后面内容的长度。现在想把这个字串放到自定义的结构中:type
Tmsg=packed reocrd
Flg,len:byte;
SData:word;
info:Widestring;
end;。
var str:string;
msg:Tmsg;
begin
str:='AA02DF0731003100';
下面如何 把 str 的内容放到 msg 这个结构中呢?
最后要得到:
msg.flg:=AA
msg.len:=02;
msg.Sdata:=DF07
msg.info:=31003100类似于一个局域网通信的程序。所以后面的内容变化。前面的长度也会变化。所以想通过一个自定义的结构来操作。感觉上要方便点吧。不过不太会。
str, Str1: AnsiString; msg:Tmsg;
iLen: Integer;
begin
str:='AA02DF0731003100';
SetLength(str1,Length(str) div 2);
HexToBin(PAnsiChar(str), PAnsiChar(str1), Length(str) div 2);
iLen := sizeof(TMSG) - sizeof(WideString);
Move(PAnsiChar(str1)^, msg, iLen);
SetLength(msg.info, (length(str1) - ilen) div 2);
move(PAnsiChar(LongWord(PAnsiChar(str1)) + iLen)^, Pointer(msg.info)^, Length(str1) - iLen);
end;
type
Tmsg=packed record
Flg,len:byte;
SData:word;
info:array[0..3] of char;
end;
var
str:string;
msg:Tmsg;
begin
str:='AA02DF0731003100'; move(pchar(str)^,msg,8);
showMessage(msg.info);
end; 不太通用。呵呵
Tmsg = packed reocrd
Flag, Len: Byte;
SData: Word;
Info: array[0..1]of WideChar;
end;
Pmsg = ^Tmsg;function BufferToMsg(cosnt Buffer): Tmsg; // Buffer = a value stored $AA$02$DF$07$31$00$31$00
begin
Result := Tmsg(Buffer);
end;function StringToMsg(const Source: AnsiString): Tmsg; // Source = 'AA02DF0731003100'
var
s: string;
l: Integer;
begin
l := Length(Source);
SetLength(s, l shr 1);
HexToBin(Pointer(Source), Pointer(s);
Result := Pmsg(s)^;
end;即可。
var
Buf : array of Byte;
begin
SetLength(Buf, Length(S) div 2);
HexToBin(PChar(S), @Buf[0], Length(S) div 2);
R.Flg := Buf[0];
R.len := Buf[1];
Move (Buf[2], R.SData, 2);
SetLength(R.info, R.len);
Move (Buf[4], R.info[1], R.len * 2);
end;procedure TForm1.FormCreate(Sender: TObject);
var
R : Tmsg;
begin
StrToRec('AA02DF0731003100', R);
ShowMessage (IntToStr(R.Flg));
ShowMessage (IntToStr(R.len));
ShowMessage (IntToStr(R.sData));
ShowMessage (R.info);
end;