langliali 2024-03-04 09:43 采纳率: 66.7%
浏览 3
已结题

delphi一些不理解的地方

这是一个记录类型的数据

TMapFileInfo = record
MapIdent : array [0..15] of char;
MapBlockSize : integer;
MapWidth : integer;
MapHeight : integer;
end;

这是一个文件读取流,返回的是一个integer

 co: integer;
MapInfo: TMapFileInfo;

co := FileOpen('D:\地图\xsc.map', fmOpenRead);
FileRead(co, MapInfo, sizeof(MapInfo));
那么问题来了,delphi7中读取到的文件流,为什么可以放到一个记录类型里面?
文件读取到的缓存文件不应该是字节数组吗?
事实上FileRead()把记录类型数据的所有属性都读到MapInfo.
这是什么原理?

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-03-04 09:44
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的关键在于理解Delphi中记录类型的存储方式以及FileRead函数的工作原理。
    首先,Delphi中的记录类型在内存中是一段连续的数据结构,可以理解为C语言中的结构体。在你提供的代码中,TMapFileInfo是一个记录类型,它包含了MapIdent、MapBlockSize、MapWidth和MapHeight四个成员变量,这些成员变量在内存中是依次存储的,而且是连续的。
    其次,FileRead函数的作用是从文件流中读取指定长度的数据,并将其存储到指定的内存地址中。在这里,你传递给FileRead函数的参数MapInfo是一个TMapFileInfo类型的变量,而sizeof(MapInfo)返回的是MapInfo变量在内存中所占的字节数,也就是整个记录类型的大小。因此,FileRead函数会从文件流中读取与MapInfo大小相同的字节,并将其按顺序存储到MapInfo变量所在的内存地址中,这样就实现了将文件流读取到记录类型中的效果。
    综上所述,Delphi中的记录类型是一种连续存储的数据结构,在内存中占据一段连续的空间,而FileRead函数可以将文件流按顺序读取到这段连续的内存中,实现了将文件流读取到记录类型中的功能。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥50 RAD_XE11.3获取android11手机的IMEI码
  • ¥15 linux的gcc命令报错
  • ¥20 如何再GIS用海岸线建立缓冲区
  • ¥15 codeblock遇到问题了,求帮助😭
  • ¥15 Qt6.8.0加载网页MSVC2022
  • ¥15 360浏览器m2的这个值
  • ¥15 国内有哪些厂商做automlops的?
  • ¥15 skynet pb mysql
  • ¥15 笔记本外接显示器分辨率太低各种方法都用过了调不高
  • ¥15 Redstone R0697-F00 D2020 交换机 OS