不是长度为324吧!而是=324;
如为压缩BCD码(2位BCD),换成HEX码:
03H 24H;
如果不要求BCD,就直接取;
高位:=HiByte(324);
低位:=LoByte(324);
超过65535的数没法存吧,所以原变量用WORD;(或对65536取模);
******************************************************
再仔细看了一下,建议你用第一种BCD码,转成字符串2位一存;
但接收方收到后单字节BUFFER必须要转回到10进制;
如18(12H)实为12;
转BCD码是协议安全问题;
两边都要转换,最简单位的是就用十进制:
先转成字符串,2位取,再转成BYTE(不可能超过99了);
你这个数也太大了:LongINT也放不下吧;
或者开始就是字符串?
设为Str1;
Type
Tbuffer1:array[0..163]of byte; //324 div 2 +1
Fuction StrToBuf(Str1:String;var Buf1:Tbuffer1):boolean;
var
i,len:Word;
begin
len:=Length(Str1);
if Len>324 then
begin
result:=False;
exit;
end;
//前2字节为长度;
Buf1[0]:=HiByte(len);
Buf1[1]:=LoByte(len);
try
if len Mod 2=0 then//长度为双数
begin
for i:=0 to (Len div 2)-1 do
buf1[i+2]:=StrtoInt(copy(Str1,i*2+1,2));
end else//长度为单数
begin
buf1[2]:=StrtoInt(copy(Str1,1,1));
for i:=1 to (Len div 2)-1 do
buf1[i+2]:=StrtoInt(copy(Str1,i*2,2));
end;
except
result:=False;
exit;
end;
Result:=true;
end;