有什么办法能将很多不同类型的转化为二进制类型的呢,比如说有integer、string、record。
在下使用流的形式,可是遇到问题。mStream为TMemoryStream类型。
temp:=10001;
mStream.WriteBuffer('123456789',Length('123456789'));
mStream.WriteBuffer(temp,sizeof(Integer));
mStream.Position:=0;
Memo1.Lines.LoadFromStream(mStream);
程序中Memo1的显示123456789*也就是说第一个WriteBuffer可以读到,第二读不到。
如果有记录体那该如何处理呢?
我的程序是把包体的很多数据转化为二进制,然后进行包体校验和计算,请各位帮忙呀,分不够可以再商量呀。
在下使用流的形式,可是遇到问题。mStream为TMemoryStream类型。
temp:=10001;
mStream.WriteBuffer('123456789',Length('123456789'));
mStream.WriteBuffer(temp,sizeof(Integer));
mStream.Position:=0;
Memo1.Lines.LoadFromStream(mStream);
程序中Memo1的显示123456789*也就是说第一个WriteBuffer可以读到,第二读不到。
如果有记录体那该如何处理呢?
我的程序是把包体的很多数据转化为二进制,然后进行包体校验和计算,请各位帮忙呀,分不够可以再商量呀。
你可以把temp的值换为$61616161验证一下
var
temp : Integer;
mStream: TMemoryStream;
begin
temp := $61616161;
mStream := TMemoryStream.Create;
mStream.WriteBuffer('123456789',Length('123456789'));
mStream.WriteBuffer(temp,sizeof(Integer));
mStream.Position:=0;
Memo1.Lines.LoadFromStream(mStream);{Memo1显示为123456789aaaa}
mStream.Free;
end;
而对于Integer等类型来说,它一定是会产生许多的值为00的字节的...所以:
你把数据放到流里是没错的,但你不能把流里的数据解释为字符串来使用。
我把读取的内存流内容要给一下函数去操作,我该怎么处理呢??function CalCheckSum(pkg:array of byte):Integer;
var checksum:Integer;
i,idx:Integer;
begin
checksum:=0;
i:=0;
for idx:= 0 to Length(pkg)-1 do
begin
i := pkg[idx] ;
if (idx mod 2 =1) then
begin
i := ( i shl 8 ) and $ff00 ;
end
else
begin
i := i and $ff ;
end;
checksum := checksum + i ;
end;
Result:= checksum;
end;
var bBytes:array of Byte;
SetLength(bBytes,0);
SetLength(bBytes,mStream.Size);
mStream.Position:=0;
mStream.ReadBuffer(bBytes[0],mStream.Size);
mStream.Clear;
CalCheckSum(bBytes);