关于delphi中TStreamMemory 将byte数组写入流中和把流中数据写入byte数组中

SR632119722 2013-09-09 05:12:51
var
mStream : TStreamMemory;
bytVal1,bytVal2 : array[0..5]of byte;
i :integer;
begin
for i:=0 to 5 do
begin
bytVal1[i] := 90+i;
end;
fillchar(bytVal2,Sizeof(bytVal2),0);
mStream := TStreamMemory.Create();
mStream.Position :=0;
mStream.WriteBuffer(bytVal1[0],length(byteval1));
mStream.Read(bytVal2[0],mStream.Size);
end;
//上面这个例子,出现的问题是:将数组1的数据写入流中,数据流的大小变为6,但读出数据到数据2确一个数据也没有填充进去。是不是写入没成功,如果没成功数据流大小为什么会是数据1的长度。
...全文
1652 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sololie 2013-09-09
  • 打赏
  • 举报
回复
谁跟你说的,有源码为啥不自己看 ReadBuffer的源码,其中也只是调用了Read,不过给包装了个异常 procedure TStream.ReadBuffer(var Buffer; Count: Longint); begin // 直接调用Read,读取count大小数据,读取后如果数据大小不一致就抛出个异常 if (Count <> 0) and (Read(Buffer, Count) <> Count) then raise EReadError.CreateRes(@SReadError); end; 往流中写入或读出一个字节,postion都+1,读写完成后,postion就停在最后的位置,你得自己把postion还原到你希望的位置。这个数组是一个道理,只不过数组名即是指向首元素,而流的读写直接找postion
zzn007 2013-09-09
  • 打赏
  • 举报
回复
最后一句写数据2之前,请内存流的position:=0加上
SR632119722 2013-09-09
  • 打赏
  • 举报
回复
问下你,Write和WriteBuffer,Read和ReadBuffer你区别.不是说WriteBuffer和ReadBuffer可以在某个位置开始插入或读取,因此这两个需要配合Position。怎么Read也需要,它不是将流中所有数据读出吗
sololie 2013-09-09
  • 打赏
  • 举报
回复
读之前再一次mStream.Position :=0;
内容概要:本文档为成都科洛威尔科技有限公司生产的MIL-1394B仿真板卡的API函数使用手册,详细介绍了该板卡在Windows和Linux环境下进行MIL-1394B/AS5643总线协议仿真和测试所需的API函数、数据结构、使用流程及例程。板卡支持CC(控制计算机)、RN(远程节点)和BM(总线监控)三种工作模式,提供丰富的函数用于设备管理、节点控制、消息收发、故障注入、断处理等功能,并涵盖数据包格式、发送接收流程、错误检测机制等关键技术细节。手册还提供了函数调用示例和典型应用场景,帮助开发者快速掌握板卡的开发与调试。; 适合人群:从事航空电子、嵌入式系统或工业自动化领域,具备C/C++编程基础并熟悉总线通信协议的1-3年工作经验的软硬件研发工程师。; 使用场景及目标:①在复杂总线环境实现高精度数据仿真与测试;②开发基于MIL-1394B协议的通信系统;③进行消息收发控制、时序偏移管理、错误注入测试及断响应处理等高级功能验证;④通过API调用实现对板卡工作模式、数据流、状态监测的全面控制。; 阅读建议:建议结合配套的demo示例程序进行实践,重点理解各函数的调用时序与参数配置逻辑,尤其关注STOF时序控制、消息发送模式、错误注入机制等核心功能的实现原理。使用前需仔细阅读“基本使用流程”与“附录”部分,确保正确配置硬件环境与通信参数。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧