有什么办法能将很多不同类型的转化为二进制类型的呢,比如说有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可以读到,第二读不到。
如果有记录体那该如何处理呢?
我的程序是把包体的很多数据转化为二进制,然后进行包体校验和计算,请各位帮忙呀,分不够可以再商量呀。
解决方案 »
- cxGrid过滤数据问题
- ShowModal后的窗体无法响应FormKeyDown事件
- 如何安装fastreport3.23.9 Enterpise
- 怎樣能判斷運行的程序是否處於閑置的狀態
- 如何得到运行是系统时钟?
- treeview里如何用鼠标右键选定一个节点?RightClickSelect属性没什么用处。
- 怎样在listview中的一列加入checkbox复选框,并设置其值?以前没用过,找起来还挺难的
- 哪儿有delphi7下载的好地方,速度快一点的!
- 怎么在DELPHI里找不到CUDP控件
- 如何在DELPHI中清空数据库中表中的记录
- excel报表问题
- delphi for win32和delphi for .net有什么区别吗?
你可以把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);